首页 > 解决方案 > 循环更新 ruby​​ 中二维数组的整个列

问题描述

我正在使用 Ruby 版本运行以下代码2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]

table = Array.new(3, Array.new(3, 0))
for i in 1..2
  table[i][0] = i
end
p table

我希望这可以打印:

[
 [0, 0, 0],
 [1, 0, 0],
 [2, 0, 0]
] 

相反,我以某种方式得到:

[
 [2, 0, 0],
 [2, 0, 0],
 [2, 0, 0]
] 

我可以用其他循环重现这个。知道这里发生了什么吗?

标签: ruby

解决方案


知道这里发生了什么吗?

您的 3 个内部数组实际上都是同一个对象。(见常见问题

要获得一个包含 3 个不同数组的数组,您必须将一个块传递给Array.new

table = Array.new(3) { Array.new(3, 0) }

内部数组Array.new(3, 0)不需要块形式,因为0它是不可变的。


推荐阅读