From: Urabe Shyouhei <shyouhei / ruby-lang.org>
Subject: [ruby-list:45574] Re: 簡潔なHASH値のインクリメント
Date: Tue, 21 Oct 2008 18:28:39 +0900

るびきちです。

> もっとRubyっぽい回答は他の人が投稿してくれるでしょう。

ワンライナー的にはpで出力が短くていいかと。
Ruby 1.9のハッシュは順序を保存するので勝手に出現順になってくれます。

$ cat A
yahoo
goo
google
yahoo
msn
msn
$ ruby18 -vlne '(h||=Hash.new(0))[$_]+=1;END{p h}' A
ruby 1.8.7 (2008-10-14 revision 18426) [i686-linux]
{"yahoo"=>2, "google"=>1, "goo"=>1, "msn"=>2}
$ ruby19 -vlne '(h||=Hash.new(0))[$_]+=1;END{p h}' A
ruby 1.9.0 (2008-10-20) [i686-linux]
{"yahoo"=>2, "goo"=>1, "google"=>1, "msn"=>2}

直訳

$ ruby18 -vlne '(h||=Hash.new(0))[$_]+=1;END{for k,v in h do print k," ",v end}' A
ruby 1.8.7 (2008-10-14 revision 18426) [i686-linux]
yahoo 2
google 1
goo 1
msn 2
$ ruby19 -vlne '(h||=Hash.new(0))[$_]+=1;END{for k,v in h do print k," ",v end}' A
ruby 1.9.0 (2008-10-20) [i686-linux]
yahoo 2
goo 1
google 1
msn 2

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/