2012-03-08 3 views
10

Je rencontre un problème pour déterminer comment trier un tableau d'un tableau. Les deux tableaux sont simples et je suis sûr que c'est assez simple, mais je n'arrive pas à le comprendre.Ruby sort tableau d'un tableau

Voici le tableau:

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

Je veux trier par la valeur entière de la matrice interne qui est une valeur de combien de fois le mot a eu lieu, le plus grand nombre premier.

Répondre

27

Essayez soit:

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

Ou:

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

Selon si vous voulez croissant ou décroissant.

1

Utilisation de la méthode # tableau de tri:

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

Cela devrait faire ce que vous voulez.

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

Le tri peut être utilisé avec un bloc.

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

Vous devriez toujours utiliser 'sort_by' pour un tri par clé. Non seulement c'est * beaucoup plus facile * à lire, mais c'est aussi plus efficace. Dans ce cas, ce serait 'a.sort_by {| el | el [1]} ', qui, dans ce cas, est le même que' a.sort_by (&: last) '. –

+1

Comment pouvons-nous utiliser ceci a.sort_by {| el | el [1]} si on veut le commander en descendant? –

+0

@ Vini.g.fer a.sort_by {| el | el [1] * -1} si el [1] est le nombre – Abel