126 votes

Comment trier un tableau de hachages en fonction d'une valeur dans le hachage?

Ce code Ruby ne se comporte pas comme je l’attendrais:

 # 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
 

Je cherche à trier le tableau de hachages par la clé "valeur", mais ils sont imprimés non triés.

230voto

Shtééf Points 10444

Ruby sort ne trie pas sur place. (Avez-vous un fond de python, peut-être?)

Ruby a sort! pour le tri sur place, mais il n'y a pas de variante sur place pour sort_by . En pratique, vous pouvez faire:

 sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
 

21voto

bjg Points 6448

Selon @shteef mais implémenté avec le tri! variante comme suggéré

 sort_me.sort! { |x, y| x["value"] <=> y["value"] }
 

8voto

AG_ Points 31

Bien que Ruby n'ait pas la variante sort_by sur place, vous pouvez faire:

 sort_me = sort_me.sort_by { |k| k["value"] }
 

Edit: Array.sort_by! a été ajouté en 1.9.2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X