如果我执行以下操作:
Application.Current.MainWindow = wnd;
现在我想修改第二个数组中索引2的值,所以我会这样做:
table = Array.new(
3,
Array.new(
3,
nil
)
)
# =>
[
[nil, nil, nil],
[nil, nil, nil],
[nil, nil, nil]
]
我现在希望看到:
table[1][2] = 2.343
然而,我得到的是:
# =>
[
[nil, nil, nil],
[nil, nil, 2.343],
[nil, nil, nil]
]
我没有到这里来的是什么?
PS:运行ruby 2.3
答案 0 :(得分:2)
要修复行为,请尝试下一步:
empty_table = Array.new(3) { Array.new(3) }
从阵列手册:
请注意,第二个参数使用对同一对象的引用填充数组。因此,仅在需要使用本机不可变对象(如符号,数字,true或false)实例化数组时才建议使用它。
答案 1 :(得分:0)
你实际上是在创建一个包含三个元素的数组,并将这个元素(新数组)放在每个空格中。您放在第一个数组中的元素只创建一次。我知道做你想做的唯一方法是使用for循环将所需数量的新数组推送到第一个数组中。像这样的东西:
table = Array.new(1, Array.new(3, 0))
0..1.each do |i|
table.push(Array.new(3, 0)) #add two more arrays to the first dimension
end