Магия руби
August 30, 2016

Когда я изучаю что хранится в базе данных, то очень люблю использовать рейлсовые конструкции
примерно такого вида User.<...>.group(:region).count
.
Однако для рубишных массивов не знал изящного решения, как посчитать сколько раз встречается
каждый элемент, и много раз писал примерно так:
[1, 2, 3, 1].group_by { |x| x }.map { |k, v| [k, v.count] }.to_h
# => {1=>2, 2=>1, 3=>1}
Выглядит не очень красиво.
Наш коллега Владислав Белов предложил отличный вариант (правда нужны руби >= 2.2):
[1, 2, 3, 1].group_by(&:itself).transform_values(&:count)
# => {1=>2, 2=>1, 3=>1}
Красота