Магия руби

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}

Красота :cat: :cat: :cat:

comments powered by Disqus