/ / Sortieren eines mehrdimensionalen Arrays mit Ruby - Ruby, Sortieren, Hash

Sortieren eines mehrdimensionalen Arrays mit Ruby - Ruby, Sortierung, Hash

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 № 1

Sie 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