In article <3A97F2C0.4030202 / vt.edu>, Roy Patrick Tan <rtan / vt.edu> wrote: >Hi, I'm a bit new to Ruby, and I have a couple of questions: > >1. How do you instantiate multidimensional arrays? >For single dimensions, I can do: >a = Array.new >a[100] = "foo" > >But if I wanted to do 2 dimensions, I currently create a one dimensional >array, and if I wanted to enter a new value, I have to check if the row >is empty: > >a = Array.new >if a[200] = nil then > a[200] = Array.new >end > >a[200][200] = "foo" > >Is there a simpler way? >something like >a = [][] >a[300][300] = "goo" >(which doesn't work...) Here is the implementation I'm currently using for a 2d array. This is different from the last one i posted because this one takes a yield block and can be used for ... interesting default assignments. =) class Matrix < Array def initialize (rows, columns) super(rows) self.each_index { |i| self[i] = Array.new(columns) self[i].each_index { |j| self[i][j] = yield i, j} } end end Specifically, what I have done with the above is: a = Matrix.new(10, 10) { TkVariable.new() } To get a 10x10 two-dimensional array of TkVariables (suitable for binding into Tk Widgets, of course. =) Or if you just want to have a two-dimensional array that is initialized with a constant (as opposed to nil), b = Matrix.new(rows, columns) { 0 } The yield block takes two arguments; the row and the column of the current position, so you could do something more fancy: c = Matrix.new(rows, columns) { |i, j| i * j } Ruby is the most fun I have ever had as a programmar! Jeremy