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

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] }]
Comments are closed.