2次元配列のコピー
Rubyのオブジェクトはdupでコピーされるが、参照先のオブジェクトまで辿ってはコピーしてくれない。
一方、Rubyでは配列は1次元配列しかない。多次元配列は配列の配列という形で定義していく必要がある。
これらより2次元配列をコピーするには各行についてそれぞれの列をコピーするという処理を明示的に行わないといけない。
例えば、2次元配列aがあったとして、b = a.dupでは行の分だけがコピーされ、別オブジェクトになるが、列要素は元のaのものを
参照してしまう。このため、a[0][0] = 3とかやるとb[0][0]の値も3に書き換わってしまっている。多次元配列をコピーするには
例えば以下のように
aaa = [] print aaa aaa << [1,2,3] aaa << [4,5,6] aaa << [7,8,9] # 行のコピー ccc = aaa.dup # 各列要素のコピー x = 0 while x < 3 do ccc[x] = aaa[x].dup x = x + 1 end aaa[0][0] = 10 print aaa # aaaの値は更新されているが、 print ccc # bbbの値は更新されない。