2010-01-12 10 views
7

tengo la siguiente matriz:ordenar una matriz multidimensional en el rubí

[["2010-01-10", 2], ["2010-01-09", 5], ["2009-12-11", 3], ["2009-12-12", 12], ["2009-12-13", 0]]

sólo quiero a solucionar el problema por el segundo valor en cada grupo y regresar el más alto, como yo quiero a la salida de ser 12 con la entrada dada arriba.

actualización

debo añadir que he hecho esto en una matriz mediante to_a, desde un hash, por lo que si no, se va a hacer lo mismo con un hash que sería aún mejor.

Respuesta

7

Uso esto en su almohadilla:

hash.values.max 

Si sólo necesita el elemento más alto, no hay necesidad de solucionar el problema!

+0

Estoy casi avergonzada por la pregunta ahora. Gracias +1 –

28

para ordenar por segundo valor

x=[["2010-01-10", 2], ["2010-01-09", 5], ["2009-12-11", 3], ["2009-12-12", 12], ["2009-12-13", 0]] 

x.sort_by{|k|k[1]} 
=> [["2009-12-13", 0], ["2010-01-10", 2], ["2009-12-11", 3], ["2010-01-09", 5], ["2009-12-12", 12]] 
+0

solo para tener en cuenta: 'sort_by' requiere Ruby 1.8.7+ –

8

Llame al método sort en su hash para solucionar el problema.

hash = hash.sort { |a, b| b[1] <=> a[1] } 

Luego convierta su hash a una matriz y extraiga el primer valor.

result = hash.to_a[0][1] 
3

Si desea que el par clave-valor con el valor máximo:

hash.max_by {|key, val| val} # => ["2009-12-12", 12] 

requiere Rubí 1.8.7+

Cuestiones relacionadas