Array.newで配列を初期化する場合のやり方です。
a = Array.new(3, 0)
p a
a[1] = 2
p a
b = Array.new(3, [0, 0, 0])
p b
b[1][1] = 2
p b # b[0][1], b[2][1]も2になってしまう
c = Array.new(3){[0, 0, 0]} # ブロックを渡して初期化
p c
c[1][1] = 2
p c # 今度は意図したとおり
d = Array.new(20){|i| i * 2} # iにはインデックスが渡される
p d
実行結果。
[0, 0, 0] [0, 2, 0] [[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[0, 2, 0], [0, 2, 0], [0, 2, 0]] [[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[0, 0, 0], [0, 2, 0], [0, 0, 0]] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/365