2010-01-12 14 views
7

ho la seguente matrice:ordina un array multidimensionale in rubino

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

voglio solo di risolvere il secondo valore in ciascun gruppo e restituire il più alto, come voglio l'uscita essere 12 con l'input specificato sopra.

aggiornamento

posso aggiungere che ho fatto questo in un array usando to_a, da un hash, quindi se c'è via per fare lo stesso con un hash che sarebbe ancora meglio.

risposta

7

Utilizzare questo sul tuo hash:

hash.values.max 

Se avete solo bisogno l'elemento più alto, non è necessario per risolvere la!

+0

Sono quasi imbarazzato per aver posto la questione ora. Grazie +1 –

28

per ordinare in secondo valore

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 per notare: 'sort_by' richiede Ruby 1.8.7+ –

8

chiamate il metodo sort sul hash per ordinarla.

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

poi convertire il vostro hash a una matrice e estrarre il primo valore.

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

Se si desidera che il coppia chiave-valore con il valore massimo:

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

richiede di Ruby 1.8.7+

Problemi correlati