我创建了一个二维数组,整个2D数组就像这样填充了9个。
matrix = Array.new(5,(Array.new(5,9)))
接下来我正在打印整个数组
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]]
接下来,我将1
分配到[0][0]
位置。
matrix[0][0] = 1
然后我再次打印矩阵
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]]
所以,就是这样!为什么每一行都受此分配的影响。它不应该只改变[0][0]
位置的值。
我正在使用ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
。
答案 0 :(得分:5)
基本上,您对每个子数组使用相同的数组引用。这样做
matrix = Array.new(5) { Array.new(5, 9) }
答案 1 :(得分:1)
问题是你没有创建5个不同的数组:
matrix = Array.new(5,(Array.new(5,9)))
此代码正在创建一个新数组,然后使用五次。因此,当您将第一个数组的单元格设置为0时,实际上将它们全部设置为0。
要解决此问题,您需要创建单个数组,例如:
matrix = []
5.times do
matrix.push(Array.new(5,9))
end
然后代码将以您期望的方式工作:
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]]