ast*_*hsy 2 ruby for-loop multidimensional-array
我学过C++,Java,现在我正在学习Ruby.
但对我而言,很难适应ruby中的迭代.
n = 4
arys = Array.new(3, Array.new(n+1, 0))
for i in 1..2
for j in 1..n
arys[i][j] = (i-1)*n+j
end
end
p arys
Run Code Online (Sandbox Code Playgroud)
上述代码的输出如下
Run Code Online (Sandbox Code Playgroud)[[0, 5, 6, 7, 8], [0, 5, 6, 7, 8], [0, 5, 6, 7, 8]]
我认为这就像C中的代码一样
for(int i = 1; i<=2; i++)
for(int j = 1; j<=n; j++)
arys[i][j] = (i-1)*n+j
Run Code Online (Sandbox Code Playgroud)
因此,我预计输出会像
[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 5, 6, 7, 8]]
上面两个代码之间的区别是什么?
在初始化行中arys你实际上创建了一个内部数组,由最外面的数组引用了三次arys:
arys.map &:__id__
#? [
# [0] 28193580,
# [1] 28193580,
# [2] 28193580
# ]
Run Code Online (Sandbox Code Playgroud)
__id__以上是唯一对象标识符的状态.
为了实现您期望的行为,应该生成三个不同的数组,例如:
ary = Array.new(5, 0)
arys = 3.times.map { ary.dup }
Run Code Online (Sandbox Code Playgroud)
请注意dup,克隆对象.现在我们有三个不同的对象(数组)
arys.map &:__id__
#? [
# [0] 34739980,
# [1] 34739920,
# [2] 34739860
# ]
Run Code Online (Sandbox Code Playgroud)
并且您的代码将按预期工作.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |