Estoy teniendo problemas para clasificar un multidimensionalarray en ruby y no puedo encontrar ninguna pregunta similar a mi problema. ¿Tengo un array / hash o ambos? (disculpe porque vengo de un fondo c / php / java y esta es la primera vez que uso Ruby)
user["shapeshifter"] = {age => "25", country => "Australia"}
user["user2"] = {age => "29", country => "Australia"}
user["user3"] = {age => "21", country => "Russia"}
Quiero ordenar la matriz de usuarios en función de la edad.
Respuestas
4 para la respuesta № 1Necesita un hash de hashes y ruby 1.9.2 para hashes ordenados, IIRC. Esto fue cubierto en Ordena hash por clave, vuelve hash en Ruby
Asumiendo su caso de prueba, arreglado para que sea válido:
user = {}
user["shapeshifter"] = {:age => 25, :country => "Australia"}
user["user2"] = {:age => 29, :country => "Australia"}
user["user3"] = {:age => 21, :country => "Russia"}
Todo lo que se necesita es:
user.sort_by {|key,value| value[:age]}
1 para la respuesta № 2
Actualmente ruby 1.9 ha ordenado hash pero aún no existe una función de reordenación.
Puedes intentar ordenar pares de matrices y hacer un Hash nuevo. Me gusta esto
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