/ / Clasificación de una matriz multidimensional con rubí - rubí, clasificación, hash

Clasificación de una matriz multidimensional con rubí - rubí, clasificación, hash

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

Necesita 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