count_by in Ruby
This is just a simple addition to Ruby’s Enumerable
that both Dan Bernier and I agreed should be a part of Ruby’s standard library.
# count_by.rb
# License: MIT
#
# Authors: Benjamin Oakes, Dan Bernier
module Enumerable
def count_by(&block)
group_by(&block).map { |criteria, group| [criteria, group.count] }
end
end
require 'minitest/spec'
require 'minitest/autorun'
describe 'count_by' do
it 'counts the groups' do
counts = %w(a b b c d d e e e e).count_by { |s| s }
assert_equal(counts, [["a", 1], ["b", 2], ["c", 1], ["d", 2], ["e", 4]])
end
end
Update (2019-02-19): This is likely to be added to Ruby 2.7 as tally
.