sort_by descending ruby arrays sorting hash

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"] }