Sto avendo problemi a ordinare un multidimensionalearray in ruby e non riesci a trovare alcuna domanda simile al mio problema. Ho un array / hash o entrambi? (mi scusi se provengo da uno sfondo c / php / java e questa è la prima volta che uso Ruby)
user["shapeshifter"] = {age => "25", country => "Australia"}
user["user2"] = {age => "29", country => "Australia"}
user["user3"] = {age => "21", country => "Russia"}
voglio ordinare l'array di utenti in base all'età.
risposte:
4 per risposta № 1È necessario un hash di hash e ruby 1.9.2 per hash ordinati, IIRC. Questo è stato coperto Ordina l'hash per chiave, restituisce l'hash in Ruby
Supponendo che il tuo test case, risolto in modo che sia valido:
user = {}
user["shapeshifter"] = {:age => 25, :country => "Australia"}
user["user2"] = {:age => 29, :country => "Australia"}
user["user3"] = {:age => 21, :country => "Russia"}
Tutto ciò che serve è:
user.sort_by {|key,value| value[:age]}
1 per risposta № 2
Attualmente ruby 1.9 ha ordinato l'hash ma non esiste ancora una funzione di riordino.
Puoi provare a ordinare coppie di array e a creare un nuovo hash. Come questo
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