Dieser Ruby Code verhält sich nicht wie erwartet:
# 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
Ich suche nach dem Schlüssel "value" das Array von Hashes zu sortieren, aber sie werden unsortiert gedruckt.
Rubys sort
wird nicht direkt sortiert. (Haben Sie vielleicht einen Python Hintergrund?)
Ruby hat sort!
für die direkte Sortierung, aber es gibt keine direkte Variante für sort_by
. In der Praxis können Sie Folgendes tun:
sorted = sort_me.sort_by { |k| k["value"] }
puts sorted
Wie @shteef, aber implementiert mit dem sort!
Variante wie vorgeschlagen:
sort_me.sort! { |x, y| x["value"] <=> y["value"] }
Obwohl Ruby hat kein sort_by
In-Place-Variante:
sort_me = sort_me.sort_by { |k| k["value"] }
Array.sort_by!
wurde in 1.9.2 hinzugefügt
Sie können sort_me.sort_by!{ |k| k["value"]}
. Das sollte funktionieren.