4

配列内のすべてのオブジェクトが元の「複製」になるように、ネストされた配列をコピーする簡単な方法はありますか? 私は最近これに遭遇します:

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]です。一般的な解決策では、配列がどれだけ深くネストされているかを知る必要さえありません。すべてのオブジェクトを歩き回り、それ自体を複製することは、私には少し強引に聞こえます。

4

1 に答える 1

4
b = Marshal.load(Marshal.dump(a))
于 2011-03-12T13:44:40.547 に答える