2010-07-03 2 views

Répondre

63
arr = arr.sort_by {|x| x.length} 

Ou dans 1.8.7+:

arr = arr.sort_by(&:length) 
+1

Désolé de commenter un tel post, mais pourriez-vous nous expliquer ce que &: la longueur est et pourquoi ça marche? Appelle-t-il la longueur de la méthode? Quelle est la signification de &? –

+3

@DanR Oui, il appelle la méthode 'longueur' sur chaque élément généré par' sort_by' - exactement comme la première ligne. L'opérateur '&' du préfixe convertit un objet (en particulier un objet Proc ou un objet qui possède une méthode 'to_proc', les objets de symbole faisant) en un bloc. Dans le cas de symboles qui seront un bloc qui appelle la méthode avec le nom donné sur son argument (car c'est ainsi que 'Symbol # to_proc' est défini). – sepp2k

9

Vous pouvez également utiliser sort:

arr.sort{|x, y| x.length <=> y.length} 
4

arr = arr.sort{|x,y| x.length - y.length} fonctionne aussi.

Questions connexes