From: Kikutani Makoto Date: 1998-01-01T17:01:58+09:00 Subject: [ruby-list:5782] 多元配列の初期化と fill あ、こっちは送りそこなっていたのか。 ---------------------------- きくたにです。今年もよろしく。 多次元配列の初期化を簡単に行うにはどうすればいいのでしょう。 今はわからないのでこうやってます。 xyz = Array.new for x in 0 .. 1 xyz[x] = Array.new for y in 0 .. 2 xyz[x][y] = Array.new for z in 0 .. 3 xyz[x][y][z] = -1 end end end なんかダサダサですね。 最初、 xyz = Array.new(2).each_index{|x| xyz[x] = Array.new(3).each_index{|y| xyz[x][y] = Array.new(4).fill(-1) } } とかしたのですが、これはだめでした。 あと、 foo = Array.new(size) ってどうゆうときに使うのでしょうか? size以上のを代入しても自動拡張されちゃいますよね。 fillの使い方もよくわかりません。 ------------------------------------------------- aaa = Array.new(3) printf "size is %d\n", aaa.size aaa.fill(10) p aaa aaa.fill(20, 0) p aaa aaa.fill(30, 0..2) p aaa aaa[4] = 5 printf "size is %d\n", aaa.size aaa.fill(40) p aaa aaa.fill(50, 0) p aaa aaa.fill(60, 0..4) p aaa ------------------------------------------------- の結果です size is 0 [] [] [30, 30, 30] size is 5 [30, 30, 30, nil, 5] [30, 30, 30, nil, 5] [60, 60, 60, 60, 60] 代入前でsizeが0なときは、fillが効かないのはしかたがない気も しますが(実はnewのsize分埋めてくれると期待してた)、 aaa.fill(40) では全部40になると思ってました。 aaa.fill(50, 0) でもマニュアルだと、省略時には配列の終りまで とあるので、全部50になると思ってました。 -- 人生を背負い投げ 菊谷 誠(Kikutani Makoto) kikutani@eis.or.jp hgf03701@niftyserve.or.jp http://www.eis.or.jp/muse/kikutani/