Ruby复制一个数组的数组

8

在Ruby中,有没有一种方法可以复制多维数组?我的意思是某些内置函数。

当我尝试使用.dup时,它只返回引用:

irb(main):001:0> a = [[1,2,3], [4,5,6]]
=> [[1, 2, 3], [4, 5, 6]]
irb(main):002:0> b = a.dup
=> [[1, 2, 3], [4, 5, 6]]
irb(main):003:0> b[0][0] = 15
=> 15
irb(main):004:0> a == b
=> true
2个回答

15

你需要复制列表中的数组而不仅仅是外部数组。最简单的方法可能是像这样:

b = a.map(&:dup)

我想这只适用于额外的1个维度。那N维呢?我想dup应该递归地应用于每个对象。 - jgomo3

8

使用Marshaling就可以解决问题:

jruby-1.6.7 :001 > a = [[1,2,3], [4,5,6]]
 => [[1, 2, 3], [4, 5, 6]] 
jruby-1.6.7 :002 > b = Marshal.load( Marshal.dump(a) )
 => [[1, 2, 3], [4, 5, 6]] 
jruby-1.6.7 :004 > a == b
 => true 
jruby-1.6.7 :005 > b[0][0] = 15
 => 15 
jruby-1.6.7 :006 > a == b
 => false 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接