如何在ruby中更改二维数组中元素的值?

时间:2016-08-11 14:08:49

标签: arrays ruby

我创建了一个二维数组,整个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]

2 个答案:

答案 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]]