2012-05-09 15 views
4

Rubyに多次元配列のコピーを作る方法はありますか?私はいくつかの組み込み関数を意味します。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 

答えて

9

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

b = a.map(&:dup) 
6

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

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