Contar a frequência de objetos em um array usando Ruby

Às vezes precisamos contabilizar qual a frequência de objetos em um array usando Ruby.

Por exemplo, um array %w(dog dog cat) tem dois elementos 'dog' e um 'cat'. Para transformar isso em um hash com os totais, podemos fazer:

words = %w(dog dog cat)

Hash[words.group_by(&:itself).map { |word, words| [word, words.size] }]

O retorno será:

{ 'dog' => 2, 'cat' => 1 }

Ps.: Se você estiver usando Ruby 2.1 ou mais antigo, você precisa fazer dessa forma:

Hash[words.group_by { |w| w }.map { |word, words| [word, words.size] }]

Deixe um comentário