2010-01-27 24 views
7

Supponiamo che io sonoOrdinamento di un array da due valori

an_array = [[2, 3], [1, 4], [1, 3], [2, 1], [1, 2]] 

voglio ordinare questo array dal primo valore di ogni array interno, e poi dalla seconda (in modo che il vettore ordinato dovrebbe assomigliare a questo: [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3]])

Qual è il modo più leggibile per farlo?

risposta

13

Questo è il comportamento predefinito per l'ordinamento array (vedi la definizione Array#<=> metodo per la prova). Si dovrebbe solo essere in grado di fare:

an_array.sort 
1

an_array.sort

8

Se volete qualche comportamento non predefinito, indagare sort_by (rubino 1.8.7+)

esempio ordinamento dal secondo elemento poi dal primo

a.sort_by {|e| [e[1], e[0]]} # => [[2, 1], [1, 2], [1, 3], [2, 3], [1, 4]] 

o ordina dal primo elemento ascendente e quindi il secondo elemento discendente

a.sort_by {|e| [e[0], -e[1]]} # => [[1, 4], [1, 3], [1, 2], [2, 3], [2, 1]] 
+0

@glenn jackman: grande risposta !!! questo è quello che stavo cercando. grazie – Radek