我想复制一个数组,在不影响原始数组的情况下就地修改副本。此代码失败
a = [
'462664',
'669722',
'297288',
'796928',
'584497',
'357431'
]
b = a.clone
b.object_id == a.object_id # => false
a[1][2] = 'X'
a[1] #66X722
b[1] #66X722
副本应该不同于对象。如果它只是一个引用,为什么它表现得像?
最佳答案
您需要对数组进行深拷贝。
方法是这样的
Marshal.load(Marshal.dump(a))
这是因为您克隆的是数组而不是其中的元素。所以数组对象是不同的,但它包含的元素是相同的实例。例如,你也可以做 a.each{|e| b << e.dup}
适合你的情况
关于ruby - 克隆一个数组及其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455309/