2012-03-08 1 views
10

Sto riscontrando un problema nel capire come ordinare un array di un array. Entrambi gli array sono semplici e sono sicuro che sia abbastanza semplice, ma non riesco a capirlo.array di ruby ​​sort di un array

Ecco la matrice:

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

voglio ordinare per il valore intero della matrice interna che è un valore di quante volte la parola si è verificato, il più grande numero primo.

risposta

27

Prova uno:

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

Oppure:

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

A seconda se si desidera ascendente o discendente.

1

Utilizzando il metodo # sorta Array:

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

Questo dovrebbe fare quello che vuoi.

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

ordinamento può essere utilizzato con un blocco.

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

Si dovrebbe * sempre * utilizzare 'sort_by' per un ordinamento con chiave. Non solo è * molto più facile * leggere, ma è anche più efficiente. In questo caso sarebbe 'a.sort_by {| el | el [1]} ', che, in questo caso, è uguale a' a.sort_by (&: last) '. –

+1

Come possiamo usare questo a.sort_by {| el | el [1]} se vogliamo ordinarlo discendente? –

+0

@ Vini.g.fer a.sort_by {| el | el [1] * -1} se el [1] è numero – Abel