ruby - 循环更新 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]
]
我可以用其他循环重现这个。知道这里发生了什么吗?
解决方案
知道这里发生了什么吗?
您的 3 个内部数组实际上都是同一个对象。(见常见问题)
要获得一个包含 3 个不同数组的数组,您必须将一个块传递给Array.new
:
table = Array.new(3) { Array.new(3, 0) }
内部数组Array.new(3, 0)
不需要块形式,因为0
它是不可变的。
推荐阅读
- python - 如何找到当前用户的主键以检查它是否与笔记 pk 匹配?
- visual-studio-code - VSCode扩展开发:如何获取一个类型的定义文件?
- algorithm - 在迷宫求解中同时结合 DFS 和 BFS 有意义吗
- python - 如何在字典中显示多个项目?
- ios - react-native-push-notification-ios - 方法声明缺少上下文
- c++ - 为什么 bool(val) 比 val.operator bool() 更喜欢双重隐式转换?
- pandas - DataFrame 属性无法识别
- java - 如何在 for 循环中添加 try catch 块以捕获 ArrayIndexOutOfBounds 异常?
- c# - EF Core - SaveChanges 上没有数据库更新
- c++ - 如何在 C++ 中使用十六进制颜色代码制作颜色查找功能