2010-07-03 10 views

Respuesta

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

O en 1.8.7+:

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

Perdón por comentar en una publicación tan antigua, pero ¿podría explicar qué es &: length y por qué funciona? ¿Está llamando a la longitud del método? ¿Cuál es el significado de &? –

+3

@DanR Sí, está llamando al método 'length' en cada elemento generado por' sort_by', exactamente como la primera línea. El operador prefijo '&' convierte un objeto (específicamente un objeto Proc o cualquier objeto que tenga un método 'to_proc', que los objetos de símbolos lo hacen) en un bloque. En el caso de símbolos que serán un bloque que llama al método con el nombre dado en su argumento (así es como se define 'Symbol # to_proc'). – sepp2k

9

También puede utilizar sort:

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

arr = arr.sort{|x,y| x.length - y.length} también funciona.

Cuestiones relacionadas