/ / Ordinamento di un array multidimensionale con ruby ​​- ruby, sorting, hash

Ordinamento di un array multidimensionale con rubino, rubino, ordinamento, hash

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