web-dev-qa-db-de.com

Wie sortiere ich ein Array von Hashes nach einem Wert im Hash?

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.

111
Ollie Glass

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
200
Stéphan Kochen

Wie @shteef, aber implementiert mit dem sort! Variante wie vorgeschlagen:

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

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

6
AG_

Sie können sort_me.sort_by!{ |k| k["value"]}. Das sollte funktionieren.

2