Team, What is the easiest way to initialize a square matrix? For example, to initialize a 3x3 array elements to 0, I am doing what you see below. But I am not sure how to proceed if, for instance, I want a NxN array where N > 10 or a huge value? I played a bit on IRB but could not find the way to do it easily. irb(main):008:0> ary = Array.new(9,[0,0,0]) => [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] Thank you

on 2009-03-19 18:09

on 2009-03-19 18:55

```
Ruby S. <removed_email_address@domain.invalid> wrote:
> ary = Array.new(9,[0,0,0])
Tread carefully, Grasshopper:
ary = Array.new(9,[0,0,0])
ary[0][0] = "surprise!"
p ary
:)
m.
```

on 2009-03-19 19:31

Ruby S. wrote: > Team, > > What is the easiest way to initialize a square matrix? > For example, to initialize a 3x3 array elements to 0, I am doing what > you > see below. But I am not sure how to proceed if, for instance, I want a > NxN > array where N > 10 or a huge value? > I played a bit on IRB but could not find the way to do it easily. > > irb(main):008:0> ary = Array.new(9,[0,0,0]) > => [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], > [0, 0, > 0], [0, 0, 0], [0, 0, 0]] > > Thank you Wouldn't the best solution be: require 'Matrix' a = Matrix.zero(3) ? Assuming you actually want to use it for Matrix math and not as just a 2D array. If you want a 2D array, I'd do ary = Array.new(3) {|row| Array.new(3) {|col| 0}}

on 2009-03-19 19:33

On Thu, Mar 19, 2009 at 10:05, Ruby S. <removed_email_address@domain.invalid> wrote: > For example, to initialize a 3x3 array elements to 0, I am doing what you > see below. But I am not sure how to proceed if, for instance, I want a NxN > array where N > 10 or a huge value? N=3 Array.new(N) { Array.new(N,0) } -m.

on 2009-03-19 19:37

Since * is defined on array, you can start with a 1x1 array and multiply to the size you need. n = 3; ary = [[0]*n]*n results in: ary => [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

on 2009-03-19 19:38

Evan F. wrote: > Since * is defined on array, you can start with a 1x1 array and multiply > to the size you need. > > > n = 3; > ary = [[0]*n]*n > > results in: > ary => [[0, 0, 0], [0, 0, 0], [0, 0, 0]] whoops! that has the same problem mentioned above: irb(main):026:0> ary[0][0] = :foo; ary => [[:foo, 0, 0], [:foo, 0, 0], [:foo, 0, 0]] I retract!

on 2009-03-19 20:31

On Thu, Mar 19, 2009 at 1:36 PM, Evan F. <removed_email_address@domain.invalid> wrote: > > whoops! that has the same problem mentioned above: > irb(main):026:0> ary[0][0] = :foo; ary > => [[:foo, 0, 0], [:foo, 0, 0], [:foo, 0, 0]] > > I retract! > -- > Posted via http://www.ruby-forum.com/. > > Thanks to all, your help is appreicated!