如何复制嵌套数组并确保副本是完整的原始副本

时间:2011-03-12 13:42:30

标签: ruby arrays object deep-copy dup

有没有一种简单的方法可以复制嵌套数组,以便数组中的每个对象都是原始的'dup'?我最近碰到了这个:

irb(main):001:0> a = [[1,2],[3,4]]
=> [[1, 2], [3, 4]]
irb(main):002:0> b = a.dup
=> [[1, 2], [3, 4]]
irb(main):003:0> a[0][1] = 99
=> 99
irb(main):004:0> a
=> [[1, 99], [3, 4]]
irb(main):005:0> b
=> [[1, 99], [3, 4]]
irb(main):006:0> a[0] = [101,102]
=> [101, 102]
irb(main):007:0> a
=> [[101, 102], [3, 4]]
irb(main):008:0> b
=> [[1, 99], [3, 4]]

因此,虽然a中的第一级数组是单个对象,但其内容却不是,a[0][1]仍然等于b[0][1]。一般的解决方案甚至不必知道数组嵌套的深度。穿过每个物体,让它成为一个副本本身对我来说听起来有点蛮力。

1 个答案:

答案 0 :(得分:3)

b = Marshal.load(Marshal.dump(a))