Kenichi,

Monday, January 16, 2012, 9:21:51 AM, you wrote:



KK> 2012/1/17 Ralph Shnelvar <ralphs / dos32.com>:
>> a = [4,5,6,4,5,6,6,7]
>>
>> result = Hash.new(0)
>> a.each { |x| ?result[x] += 1 }
>>
>> p result
>>
>>
>>
>> The result I am getting
>> ? {4=>2, 5=>2, 6=>3, 7=>1}
>> is what I want.
>>
>> Is there a better way; perhaps using uniq?
>>
>>


KK> I like this

KK> a = [4,5,6,4,5,6,6,7]

KK> # 1
KK> p Hash[a.group_by{|n|n}.map{|k, v|[k, v.size]}]

KK> # 2
KK> p Hash.new(0).tap{|h|a.each{|n|h[n] += 1}}


I like #2.  I can understand it.  I'm still having trouble wrapping my head around #1.


Having said that, is your #2 better than mine in any dimension (comprehensibility and/or speed of execution?