HashをValue順に並び替える
JavaでいうところのTreeMap(だったっけ)のようなことをやってみようとした。
{単語:出現回数}のようなHashがあったときに、出現回数降順に並べてみる。
まず、
result = hash.sort{|a, b| b[1] <=> a[1] }
でソート。
ところが、この結果はHashでなくArrayで返ってくることが判明。
[[aaa,1],[ccc,2],[bbb,3]]
のような感じ。
しょうがないので、Hashに戻してみる。
# 配列の要素が偶数の場合のみ class Array def to_hash Hash[*self] end end result.flatten! #中身の配列を取り除き、まったいらな配列にする。 hresult = result.to_hash
ところが、こうするとArrayの順番は保持されず、Key順に並べられてしまう。
しょうがないので、実際に値を取り出すようなタイミングで、1個1個やるしかないようだ。
result.each{|item| hash = Hash[*item] p hash }
ところで、「*item」の*ってなんだろう?
もっといい方法あるのかなぁ。
参考:
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Array%A4%F2%B3%C8%C4%A5%A4%B9%A4%EB