|
[ruby-list:42447] Re: rubyで多次元配列の作り方: msg#00101lang.ruby.japanese
From: Yoshihiro Sugihara <jinnee-DFxqcuf94YLbmG5+kqVDhQ@xxxxxxxxxxxxxxxx> Subject: [ruby-list:42442] rubyで多次元配列の作り方 Date: Thu, 22 Jun 2006 15:39:06 +0900 るびきちです。 > 初歩的な質問で申し訳ないんですが、Rubyで多次元配列の使い方が判りません。 > Arrayクラスにはどうも多次元配列をサポートしてないようだったので、 Arrayは直接多次元配列をサポートしているわけではありません。 中級レベルになりますが、数値計算で多次元配列が欲しいならばnarrayライブ ラリを使うのが定番でしょう。 http://raa.ruby-lang.org/list.rhtml?name=narray > Hashクラスを用いて > irb(main):074:0> i=0 > => 0 > irb(main):075:0> j=0 > => 0 > irb(main):076:0> while i<5 > irb(main):077:1> while j<5 > irb(main):078:2> hs["i,j"]=i+j > irb(main):079:2> j +=1 > irb(main):080:2> end > irb(main):081:1> i += 1 > irb(main):082:1> end > irb(main):083:0> p hs > {"i,j"=>4} > => nil hs["i,j"]の部分をhs["#{i},{#j}"]にしないとだめです。 また、jの初期化位置が間違っています。 オリジナルに忠実に修正するとこうでしょうか。 hs={} i=0 while i<5 j=0 while j<5 hs["#{i},#{j}"]=i+j j +=1 end i += 1 end p hs.length p hs["2,3"] また、HashのkeyをArrayにすることで擬似的に多次元配列が実現できます。 こっちのほうがきれいでしょう。 hs={} i=0 while i<5 j=0 while j<5 hs[[i,j]]=i+j j +=1 end i += 1 end p hs.length p hs[[2,3]] さらに、Rubyらしくするには、ループ処理をイテレータで抽象化します!! 5.times do |i| はiが0から4まで繰り返します。 0.step(4) do や (0..4).each do 書き方もあります。 (0..4)はRangeオブジェクトで0から4までの範囲を表します。 hs={} 5.times do |i| 5.times do |j| hs[[i,j]]=i+j end end p hs.length p hs[[2,3]] mapは配列(やそれに準ずるもの)の各要素に対してブロックを評価した結果を 全て含む配列を返します。 [1,2].map{|x| x*2 } # => [2,4] (0..4).map{|x| x*2} # => [0,2,4,6,8] これを二重に使ってやるとあっさり多次元配列ができます。 hs = (0..4).map do |i| (0..4).map do |j| i+j end end p hs.length # 5 p hs.flatten.length # 25 p hs[2][3] # 5 p hs 高度な抽象化ができるところは、Rubyの一番かっこいい部分のひとつだと思います。 そしてプログラミングを効率よく、そして楽しいものにしてくれます。 -- rubikitch http://www.rubyist.net/~rubikitch/
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:42446] Re: rubyで多次元配列の作り方, Teruki Shigitani |
|---|---|
| Next by Date: | [ruby-list:42448] Re: rubyで多次元配列の作り方, Hiroyuki Iwatsuki |
| Previous by Thread: | [ruby-list:42446] Re: rubyで多次元配列の作り方, Teruki Shigitani |
| Next by Thread: | [ruby-list:42450] Re: rubyで多次元配列の作り方, Yoshihiro Sugihara |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |