0

Basically I'm trying to modify an element in a 2D array. How the array is initialized seems to be effecting the behaviour. I'm new to Ruby so I'm not sure how initializing an array would effect this. What am I missing to get the desired result from the desired initialization method?

arr_1 = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # undesired initialization
arr_2 = Array.new(3, Array.new(3, 0)) # desired initialization

arr_1[0][0] = 99
puts arr_1 # desired result below
=begin
99
0
0
0
0
0
0
0
0
=end

arr_2[0][0] = 99
puts arr_2 # undesired result
=begin
99
0
0
99
0
0
99
0
0
=end
4
  • 3
    You have to use Array.new(3) { Array.new(3, 0) } if you want multiple copies – see Array::new – Common gotchas Commented Feb 4, 2021 at 17:06
  • Thanks! That did the trick (: Commented Feb 4, 2021 at 17:31
  • Note: arr_2 = Array.new(3, Array.new(3, 0)) then arr_2.map { |a| a.object_id } #=> [1420, 1420, 1420]. What does that tell you? Commented Feb 4, 2021 at 18:35
  • If the elements in the array were unique from each other, the object id would differ? Commented Feb 5, 2021 at 20:21

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.