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