group_byを使うやり方
group_byメソッドで、同じ値のグループを作成し、
key value
形式で、
mapメソッドの中で集計する
最後にto_h
で見やすく出来る
ary = [1, 1, 1, 2, 3, 3]
p ary.group_by(&:itself).map{ |key,value| [key, value.count] }.to_h
=> {1=>3, 2=>1, 3=>2}
参考文献
group_by
こんな感じで、デフォルトではハッシュが作成される。
ary = [1, 1, 1, 2, 3, 3]
p ary.group_by(&:itself)
p ary.group_by(&:itself).to_a
=> {1=>[1, 1, 1], 2=>[2], 3=>[3, 3]}
=> [[1, [1, 1, 1]], [2, [2]], [3, [3, 3]]]
[追記]
Ruby 2.7 以降をご利用の方は、
このやり方を使うと良いです。
tally
メソッドが追加されているので、こちらの方がスッキリ
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/tally.html
% ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-darwin20]
irb(main):001:0> ary = [1, 1, 1, 2, 3, 3]
irb(main):002:0> ary.tally
=> {1=>3, 2=>1, 3=>2}