Ich habe Probleme beim Sortieren eines MultidimensionalenArray in Ruby und kann keine Frage finden, die meinem Problem ähnelt. Ich habe ein Array / Hash oder beides?
user["shapeshifter"] = {age => "25", country => "Australia"}
user["user2"] = {age => "29", country => "Australia"}
user["user3"] = {age => "21", country => "Russia"}
Ich möchte das Benutzer-Array nach Alter sortieren.
Antworten:
4 für die Antwort № 1Sie benötigen einen Hash von Hashes und Ruby 1.9.2 für sortierte Hashes, IIRC. Dies wurde in abgedeckt Hash nach Schlüssel sortieren, Hash in Ruby zurückgeben
Angenommen, Ihr Testfall wurde korrigiert, damit er gültig ist:
user = {}
user["shapeshifter"] = {:age => 25, :country => "Australia"}
user["user2"] = {:age => 29, :country => "Australia"}
user["user3"] = {:age => 21, :country => "Russia"}
Alles was es braucht ist:
user.sort_by {|key,value| value[:age]}
1 für die Antwort № 2
Momentan hat Ruby 1.9 Hash bestellt, aber es existiert noch keine Umordnungsfunktion.
Sie können Sortierpaare von Arrays ausprobieren und anschließend einen neuen Hash erstellen. So was
user = {}
user["shapeshifter"] = {:age => "25", :country => "Australia"}
user["user2"] = {:age => "29", :country => "Australia"}
user["user3"] = {:age => "21", :country => "Russia"}
result1 = user.sort { |user1, user2|
user1[1][:key] <=> user2[1][:key] # user1,2 = [key, value] from hash
}
puts Hash[result1].inspect
or this
result2 = user.sort_by { |user_key, user_val|
user_val[:key]
}
puts Hash[result2].inspect