NArrayライブラリを使わないRuby多次元配列
Rubyでは、なんと多次元配列をC言語、Java・・・etcのように作ることができない!!
なんということだ・・・
うーん入れ子構造にすれば・・・
array = Array.new(5,Array.new(5)
これで出来るだろ・・・w
!!?
irb(main):001:0> array = Array.new(5,Array.new(5)) => [[nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil], [nil, nil, nil, nil, nil]] irb(main):002:0> array[0][0] = 3 => 3 irb(main):003:0> p array [[3, nil, nil, nil, nil], [3, nil, nil, nil, nil], [3, nil, nil, nil, nil], [3, nil, nil, nil, nil], [3, nil, nil, nil, nil]] => nil irb(main):004:0>
・・・?3がいっぱい・・・???
というわけで無理なようです。
入れ子構造には変わりないようですが、こう書くといいみたいです。
array = Array.new(5).map!{Array.new(5,0)} #0は初期化
もしくは
array = Array.new(5) array.each_index{|y| array[y] = Array.new(5,0)}
らしいです。
結果
irb(main):001:0> array = Array.new(5).map!{Array.new(5,0)} => [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] irb(main):002:0> array[0][1] = 3 => 3 irb(main):003:0> p array [[0, 3, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
というわけです。
NArrayライブラリを
sudo gem install narray
でいいのかな・・・?ggrks
で入れてもいいけども2、3次元配列用クラスを自作しておいてもいいのではないでしょうか??
追記
isaisstillaliveさんからご指摘がありました。
どうやら
image = Array.new(5){Array.new(5,0)}
で大丈夫みたいです^^
isaisstillaliveさんに感謝