baptiste Auguiwrote: > Hi, > > Being used to deal with Octave / Matlab, I'm a bit confused by Ruby > structures (arrays, hashes, etc). I have this data file "data.dat" with > 3 columns: > > >> 1.240000 9.990000e-01 1.290000e-06 >> 1.550000 1.000000e+00 2.920000e-06 >> 2.066000 1.002000e+00 8.360000e-06 >> 2.480000 1.001000e+00 1.520000e-05 >> 2.755000 1.001000e+00 2.210000e-05 >> 3.099000 1.003000e+00 3.570000e-05 >> 3.444000 1.003000e+00 3.240000e-05 >> 3.542000 1.003000e+00 1.720000e-05 >> 4.133000 1.001000e+00 1.430000e-05 >> 4.959000 1.001000e+00 2.400000e-05 >> 6.199000 1.001000e+00 4.720000e-05 >> 8.265000 9.990000e-01 1.210000e-04 > > I would like to think of the columns as arrays "a", "b", "c", execute a > loop along their indices, pick the values i want, and do something with > them. What would be a sensible data structure for this? > I can read this datafile line by line using IO:readlines("data.dat"), > but I cannot find a way to refer to one column in the array of strings > generated. In native Ruby, the only way to do that would be: arr = [[0,1],[2,3],[4,5]] arr.map{|a| a[0]} # => [0,2,4] If you can install rb-gsl (and it's probably a good idea if you're expecting to do matlab/octavey things), then there's the GSL::Matrix#column method which (as I understand it, not being a heavy GSL user) actually gives a reference into the original matrix, rather than copying to a new one as Array#map does. -- Alex