Array.new( size, obj )
This will create an array of _size_ with the same _obj_ in every
position of the array. So you line above
chessboard=Array.new(8,Array.new(8," "))
created a new chessboard with the same array (the rows) copied eight
times into the array. You can see this by doing ...
chessboard.each {|row| puts row.object_id}
You will see that the object_id of each row is the same -- hency they
are the same object -- hency you see the pawn at position 3 of each
row.
Try this one ...
chessboard = Array.new(8) {|idx| Array.new(8, "")}
chessboard[3][3] = "pawn"
This will do what you expect. Read the documentation for Array.new It
will explain all these subtle nuances.
Blessings,
TwP
ยทยทยท
On 11/15/06, Smgspices@aol.com <Smgspices@aol.com> wrote:
I thought the answer about how to create multidimensional arrays as
presented here was very interesting, "create an array of arrays." A funny
thing happened on the way to the store.
I fired up FreeRIDE and entered, "chessboard = Array.new(8, Array.new(8, "
")) like so:irb(main):009:0> chessboard=Array.new(8,Array.new(8," "))
=> [[" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ",
" ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", "
", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ",
" ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], [" ", "
", " ", " ", " ", " ", " ", " "]]This was exactly as I expected. Then I tried putting a pawn on the board:
irb(main):010:0> chessboard[3][3]="Pawn"
=> "Pawn"Then I looked at the board:
irb(main):011:0> chessboard
=> [[" ", " ", " ", "Pawn", " ", " ", " ", " "], [" ", " ", " ", "Pawn", "
", " ", " ", " "], [" ", " ", " ", "Pawn", " ", " ", " ", " "], [" ", " ", "
", "Pawn", " ", " ", " ", " "], [" ", " ", " ", "Pawn", " ", " ", " ", " "],
[" ", " ", " ", "Pawn", " ", " ", " ", " "], [" ", " ", " ", "Pawn", " ", "
", " ", " "], [" ", " ", " ", "Pawn", " ", " ", " ", " "]]