2010-01-27 17 views
7

Supongamos que tengoOrdenación de un conjunto de dos valores

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

Quiero resolver esto matriz por el primer valor de cada matriz interior y, a continuación, por el segundo (por lo que la matriz ordenada debe tener este aspecto: [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3]])

¿Cuál es la forma más fácil de hacerlo?

Respuesta

13

Este es el comportamiento por defecto para ordenar matrices (véase la definición Array#<=> método para la prueba). Usted sólo debe ser capaz de hacer:

an_array.sort 
1

an_array.sort

8

Si desea algún comportamiento no predeterminado, investigar sort_by (rubí 1.8.7+)

por ejemplo, ordenar por el segundo elemento a continuación por el primer

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

o ordenar por el primer elemento ascendente y luego descendente del segundo elemento

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

Jackman @glenn: gran respuesta !!! eso es lo que estaba buscando. gracias – Radek

Cuestiones relacionadas