web-dev-qa-db-fra.com

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.

111
Ollie Glass

Ruby sort ne trie pas sur place. (Avez-vous un arrière-plan Python?)

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

sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
200
Stéphan Kochen

Selon @shteef mais implémenté avec le sort! variante telle que suggérée:

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

Bien que Ruby n'a pas de sort_by variante in-situ, vous pouvez faire:

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

Array.sort_by! a été ajouté à 1.9.2

6
AG_

Vous pouvez utiliser sort_me.sort_by!{ |k| k["value"]}. Cela devrait marcher.

2
Mukesh Kumar Gupta