Rubyの多次元配列の初期化について
最近やらかしたRubyでのミスについて書いてみます。
多次元配列の初期化についてなのですが、最初はこんな風に書きました。
array = Array.new(3,Array.new(3,0));
これで問題なく通りますし、良いような気がするのですが、この配列をいじってみると変なことが起こります。
例えば、
array[0][0] = 1
としたとします。このとき、配列の中身は
[[1,0,0],[0,0,0],[0,0,0]]
となっていてほしいのですが、残念ながらこうはなりません。
実際には、
[[1,0,0],[1,0,0],[1,0,0]]
となってしまいます。どうやら全部同じ配列を参照しているようです。
思った通りの働きをするには
array = Array.new(3){Array.new(3,0)}
としなければなりません。なんでこんな風になるのか、Rubyのブロックの使い方は独特ですね。ちょっとこの辺も勉強してみようと思います。