ruby - descending - ¿Cómo puedo ordenar una matriz de valores hash por un valor en el hash?
ruby sort_by descending (4)
Este código de Ruby no se está comportando como era de esperar:
# create an array of hashes
sort_me = []
sort_me.push({"value"=>1, "name"=>"a"})
sort_me.push({"value"=>3, "name"=>"c"})
sort_me.push({"value"=>2, "name"=>"b"})
# sort
sort_me.sort_by { |k| k["value"]}
# same order as above!
puts sort_me
Estoy buscando ordenar la matriz de hashes por la clave "valor", pero están impresos sin clasificar.
Aunque Ruby no tiene una sort_by
in-place, puede hacer:
sort_me = sort_me.sort_by { |k| k["value"] }
Array.sort_by!
fue agregado en 1.9.2
El sort
de Ruby no se arregla en el lugar. (¿Tiene antecedentes de Python, quizás?)
¡Ruby tiene sort!
para ordenar en el lugar, pero no hay una variante in-situ para sort_by
. En la práctica, puedes hacer:
sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
Puede usar sort_me.sort_by!{ |k| k["value"]}
sort_me.sort_by!{ |k| k["value"]}
. Esto debería funcionar.
Según @shteef pero implementado con el sort!
variante como se sugiere:
sort_me.sort! { |x, y| x["value"] <=> y["value"] }