rubyでuniq -c
rubyでuniq -cをやる
>> [1,2,2,1,2,3,4,2,1,2,4,3,1,3].inject(Hash.new(0)){|r,i|r[i]+=1;r} => {1=>4, 2=>5, 3=>3, 4=>2}
最後にrを評価するのではまった。
>> {1=>2}[1]+=1 => 3
だもんな…
別解
>> [4,1,2,2,1,2,3,4,2,1,2,4,3,1,3].group_by{|i|i}.map{|k,v|[k,v.size]} => [[4, 3], [1, 4], [2, 5], [3, 3]]
injectの勝ち
追記 2011/06/18 00:18:57:
$ 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
以前にメーリングリストであったらしい。
(h||=Hash.new(0))[$_]+=1
これはすごいな。||= の使い方わすれてた。