Parnab Sanyal - 1 year ago 102
Ruby Question

# How to change value of an element in two dimensional array in ruby?

I have created a two dimensional array and the whole 2D array is populated with 9 like this.

``````matrix = Array.new(5,(Array.new(5,9)))
``````

Next I am printing the whole array

``````puts "#{matrix}" # => [[9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9]]
``````

Next I am assigning
`1`
to the
`[0][0]`
position.

``````matrix[0][0] = 1
``````

Then I am again printing the matrix

``````puts "#{matrix}" # => [[1, 9, 9, 9, 9], [1, 9, 9, 9, 9], [1, 9, 9, 9, 9], [1, 9, 9, 9, 9], [1, 9, 9, 9, 9]]
``````

So, here is the case! Why every row is being affected by this assignment. Shouldn't it only change the value of
`[0][0]`
position.
I am using
`ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]`
.

The problem is that you are not creating 5 different arrays:

``````matrix = Array.new(5,(Array.new(5,9)))
``````

this code is creating a new array which is then used five times. So, when you set the cell of the first array to 0, you actually set them all to 0.

To fix this, you need to create individual array, for example this way:

``````matrix = []

5.times do
matrix.push(Array.new(5,9))
end
``````

Then the code will work the way you expect:

``````   matrix[0][0] = 5
puts matrix #  [[5, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9], [9, 9, 9, 9, 9]]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download