如何修改二维数组中的位置?

时间:2016-04-20 18:10:13

标签: ruby

如果我执行以下操作:

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

2 个答案:

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