Tengo un contador hash que estoy tratando de ordenar por conteo. El problema con el que me encuentro es que la función Hash.sort predeterminada ordena los números como cadenas en lugar de por tamaño de número.
es decir, Hash dado:
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
Ejecutando este código:
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
devolverá una matriz ordenada:
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
Aunque 745 es un número mayor que 9, 9 aparecerá primero en la lista. Cuando trato de mostrar quién tiene la cuenta más alta, esto me dificulta la vida. :)
¿Alguna idea sobre cómo ordenar un hash (o incluso una matriz) por tamaño de valor numérico?
Agradezco cualquier ayuda.
Respuestas:
No tengo idea de cómo obtuviste tus resultados, ya que no se ordenaría por valor de cadena ... Debes invertir
a1
ya2
en tu ejemploLa mejor manera en cualquier caso (según Mladen) es:
Si necesita un hash como resultado, puede usar
to_h
(en Ruby 2.0+)fuente
sort_by{|k,v| v}
metrics.sort_by{ |k, v| v }.reverse.to_h
Como el valor es la última entrada, puede hacer:
fuente
&:last
?sort_by(&:last)
es efectivamente una abreviatura desort_by {|x| x.last}
stackoverflow.com/questions/1217088/…Ya respondí pero aún así. Cambia tu código a:
Convertido a cadenas en el camino o no, esto hará el trabajo.
fuente
Ese no es el comportamiento que estoy viendo:
¿Es posible que en algún lugar a lo largo de la línea sus números se conviertan en cadenas? ¿Hay más código que no estás publicando?
fuente