我这样创建了一个数组:
arr = Array.new(4, Array.new(4, '*'))
当我尝试更改一个元素时,例如第一个数组的第一个元素:
arr[0][0] = 3
然后每个元素都会改变。
print arr
[[3, "*", "*", "*"], [3, "*", "*", "*"], [3, "*", "*", "*"], [3, "*", "*", "*"]]
有人能解释为什么会这样吗?
最佳答案
做:
arr = Array.new(4) { Array.new(4, '*') }
Ruby数组实际上是一组指针,指向内存中的其他一些对象在代码中,所有指针都指向用
Array.new(4, '*')
创建的同一对象如果您将传递一个块,而不是值,则将对数组的每个元素执行此块,因此每个指针将指向内存中的一个新对象。实际上,上面的代码对于字符串“*”仍然有类似的问题。您应该使用相同的方法来修复它:
arr = Array.new(4) { Array.new(4) { '*' } }
关于ruby - 改变数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24107683/