Initializing an NxN array

R

Ruby Student

[Note: parts of this message were removed to make it a legal post.]

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
 
A

Adam Gardner

Ruby said:
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}}
 
M

Marcelo

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.
 
E

Evan Farrar

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]]
 
E

Evan Farrar

Evan said:
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!
 
R

Ruby Student

[Note: parts of this message were removed to make it a legal post.]

Evan said:
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!

Thanks to all, your help is appreicated!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,012
Latest member
RoxanneDzm

Latest Threads

Top