2010-07-03 20 views

Odpowiedz

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

Albo w 1.8.7+:

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

Przepraszamy za komentarze na temat tak starego posta, ale czy możesz wyjaśnić, co i: długość jest i dlaczego działa? Czy nazywa się długość metody? Jakie jest znaczenie &? –

+3

@DanR Tak, to wywołanie metody 'length' na każdym elemencie uzyskanym przez' sort_by' - dokładnie tak, jak w pierwszym wierszu. Przedrostek operatora '&' konwertuje obiekt (w szczególności obiekt Proc lub dowolny obiekt, który ma metodę 'to_proc', które obiekty symboli mają) do bloku. W przypadku symboli, które będą blokami, które wywołują metodę o podanej nazwie na jej argumencie (tak definiuje się "Symbol # to_proc"). – sepp2k

9

Można również użyć sort:

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

arr = arr.sort{|x,y| x.length - y.length} działa zbyt.

Powiązane problemy