rails query ruby arrays

query - Ruby-Elementos únicos en Array



rails select uniq (10)

Tengo una matriz con algunos elementos. ¿Cómo puedo obtener la ocurrencia de cada elemento en la matriz?

Ejemplo:

Dado:

a = [''cat'', ''dog'', ''fish'', ''fish'']

Resultado:

a2 #=> {''cat'' => 1, ''dog'' => 1, ''fish'' => 2}

¿Cómo puedo hacer eso?


En la versión 1.9.2 puede hacerlo de esta manera, según mi experiencia, muchas personas encuentran cada each_with_object un each_with_object más legible que reduce/inject (los que lo saben al menos):

a = [''cat'',''dog'',''fish'',''fish''] #=> ["cat", "dog", "fish", "fish"] a2 = a.each_with_object(Hash.new(0)) { |animal, hash| hash[animal] += 1 } #=> {"cat"=>1, "dog"=>1, "fish"=>2}


Puedes usar Enumerable#group_by para hacer esto

res = Hash[a.group_by {|x| x}.map {|k,v| [k,v.count]}] #=> {"cat"=>1, "dog"=>1, "fish"=>2}


Usa el método de conteo de la array para obtener el conteo.

a.count(''cat'')


ruby fu!

count = Hash[Hash[rows.group_by{|x| x}.map {|k,v| [k, v.count]}].sort_by{|k,v| v}.reverse]


a = [''cat'',''dog'',''fish'',''fish''] a2 = Hash.new(0) a.each do |e| a2[e] += 1 end a2


a = [''cat'',''dog'',''fish'',''fish''] a2 = Hash[a.uniq.map {|i| [i, a.count(i)]}]


a.inject({}){|h, e| h[e] = h[e].to_i+1; h } #=> {"cat"=>1, "fish"=>2, "dog"=>1}

o solución n2

a.uniq.inject({}){|h, e| h[e] = a.count(e); h } #=> {"cat"=>1, "fish"=>2, "dog"=>1}


a2 = a.reduce(Hash.new(0)) { |a, b| a[b] += 1; a } #=> {"cat"=>1, "fish"=>2, "dog"=>1}


a2 = {} a.uniq.each{|e| a2[e]= a.count(e)}


m = {} a.each do |e| m[e] = 0 if m[e].nil? m[e] = m[e] + 1 end puts m