# Newbiest ? ever - Ruby

(ruby 1.8.0 Linux) I don't understand why I get the following behavriour: irb(main):001:0> matrix = Array.new( 3, Array.new( 4, 0 ) ) => [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] irb(main):002:0> matrix[0][0] = 1 => 1 irb(main):003:0> matrix => [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] irb(main):004:0> I would have expected the assignment of matrix[0][0] to produce a matrix: [[1,0,0,0],[0,0,0,0][0,0,0,0]] What am I not getting here? __________________________________________________ _______________ Plan your next US getaway to one of the super destinations here. http://special.msn.com/local/hotdestinations.armx...

1. ## Newbiest ? ever

(ruby 1.8.0 Linux)

I don't understand why I get the following behavriour:

irb(main):001:0> matrix = Array.new( 3, Array.new( 4, 0 ) )
=> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
irb(main):002:0> matrix[0][0] = 1
=> 1
irb(main):003:0> matrix
=> [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
irb(main):004:0>

I would have expected the assignment of matrix[0][0] to produce a matrix:
[[1,0,0,0],[0,0,0,0][0,0,0,0]]

What am I not getting here?

__________________________________________________ _______________
Plan your next US getaway to one of the super destinations here.
http://special.msn.com/local/hotdestinations.armx

Orion Guest

2. ## Re: Newbiest ? ever

Because, matrix = Array.new( 3, Array.new( 4, 0 ) )
creates an array with three elements all poining to the same array
object. What you need is something like that:

matrix = Array.new( 3 ) { Array.new( 4, 0 ) }

/kent

Orion Hunter wrote:
Kent Guest

3. ## Re: Newbiest ? ever

il Tue, 10 Feb 2004 02:56:28 +0900, "Orion Hunter"
<com> ha scritto::

Array.new(num,object) just creates num refernces to object:
irb(main):001:0> a=Array.new(3,'yo')
=> ["yo", "yo", "yo"]
irb(main):002:0> a[0].id
=> 20896272
irb(main):003:0> a[1].id
=> 20896272

what you want is different object with the same value, you can do this
with:
irb(main):004:0> a=Array.new(3) {'yo'}
=> ["yo", "yo", "yo"]
irb(main):005:0> a[0].id
=> 20863668
irb(main):006:0> a[1].id
=> 20863656

so you should write:

matrix= Array.new(3) do
Array.new(4,0)
end

or just do:
require 'matrix'
:)

gabriele Guest

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•