2012-03-08 8 views
10

Tengo un problema para averiguar cómo puedo ordenar una matriz de una matriz. Ambas matrices son simples y estoy seguro de que es bastante simple, pero parece que no puedo resolverlo.matriz de clasificación de ruby ​​de una matriz

Aquí está la matriz:

[["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 

deseo aclarar que por el valor entero de la matriz interior, que es un valor de cuántas veces ha ocurrido la palabra, el mayor número en primer lugar.

Respuesta

27

Prueba cualquiera:

array = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
sorted = array.sort {|a,b| a[1] <=> b[1]} 

O:

array = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
sorted = array.sort {|a,b| b[1] <=> a[1]} 

Dependiendo si desea subir o bajar.

1

Utilizando el método # Ordenar un array:

ary = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
ary.sort { |a, b| b[1] <=> a[1] } 
1

Esto debería hacer lo que quiera.

a = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
a.sort {|x,y| y[1] <=> x[1]} 
2

tipo se puede utilizar con un bloque.

a = [["happy", 1], ["sad", 2], ["mad", 1], ["bad", 3], ["glad", 12]] 
a.sort { |o1, o2| o1[1] <=> o2[1] } 
#=> [["happy", 1], ["mad", 1], ["sad", 2], ["bad", 3], ["glad", 12]] 
+4

Debería * siempre * usar 'sort_by' para una ordenación por teclado. No solo es * mucho más fácil * de leer, también es más eficiente. En este caso, sería 'a.sort_by {| el | el [1]} ', que, en este caso, es lo mismo que' a.sort_by (&: last) '. –

+1

¿Cómo podemos usar esto a.sort_by {| el | el [1]} si queremos ordenarlo descender? –

+0

@ Vini.g.fer a.sort_by {| el | el [1] * -1} si el [1] es el número – Abel

Cuestiones relacionadas