我想复制一个数组,在不影响原始数组的情况下就地修改副本。此代码失败

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/

10-09 05:50
查看更多