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
4

2 に答える 2

15

外側の配列だけでなく、リスト内の配列を複製する必要があります。最も簡単な方法はおそらく次のようなものです

b = a.map(&:dup)
于 2012-05-09T11:48:12.113 に答える
8

マーシャリングはトリックを行う必要があります:

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 
于 2012-05-09T11:14:18.127 に答える