From: matz@... (Yukihiro Matsumoto) Date: 1997-03-13T15:25:55+09:00 Subject: [ruby-list:2372] Re: [Req] Hash#reverse (Re: [Req] Array#reverse ) まつもと ゆきひろです. In message "[ruby-list:2369] Re: [Req] Hash#reverse (Re: [Req] Array#reverse )" on 97/03/13, sinara@blade.nagaokaut.ac.jp writes: | |原です。 |> メソッド名としては, inverseのほうがよいのでは?? | |なるほど確かにそうですね。でも perl では reverse となってる |んですよ。 え? perlのreverseってhash.to_a.reverse!と同じでは? と,思ったら連想配列に代入すると逆変換になるようですね.おそ るべし,perlのコンテキスト.rubyにはコンテキストなんて概念は ないので,名前で変えるしかないですね. # perlfunc.podにはそんなこと書いてないぞ. んで,その場合 |この際、 | | { 1=>10, 2=>20, 3=>30 }.reverse ==> { 10=>1, 20=>2, 30=>3 } | |に加えて、 | | { 1=>10, 2=>10, 3=>30 }.inverse ==> { 10=>[1,2], 30=>[3] } | |というのも作っちゃうとか、、、。 どちらの動作が望ましいですか? しかし, nhash={} hash.each do |k,v| nhash[v]=k end の4行で実装できるものをわざわざ組み込む必要もない気がしない でもない.速度もそんなに違わないし.後者の動作なら nhash={} hash.each do |k,v| unless ary=nhash[v] nhash[v] = [k] else ary.push k end end ですね. まつもと ゆきひろ /:|)