更改阵列

时间:2014-06-08 15:27:56

标签: ruby arrays

我用这种方式创建了一个数组:

 arr = Array.new(4, Array.new(4, '*'))

当我尝试更改一个元素时,例如第一个数组的第一个元素:

 arr[0][0] = 3

然后更改每个第一个元素。

 print arr
 [[3, "*", "*", "*"], [3, "*", "*", "*"], [3, "*", "*", "*"], [3, "*", "*", "*"]]

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

执行:

arr = Array.new(4) { Array.new(4, '*') }

Ruby数组实际上是一组指针,指向内存中的其他一些对象。在您的代码中,所有指针都指向使用Array.new(4, '*')创建的同一对象。如果,而不是值,你将传递一个块,这个块将被执行为数组的每个元素,因此每个指针将指向内存中的一个新对象。

事实上,上面的代码仍然存在与字符串' *'类似的问题。您应该使用相同的方法来修复它:

arr = Array.new(4) { Array.new(4) { '*' } }