2010-07-03 33 views

Trả lời

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

Hoặc trong 1.8.7+:

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

Xin lỗi vì đã nhận xét về bài đăng cũ như vậy, nhưng bạn có thể giải thích về & độ dài là gì và tại sao nó hoạt động? Là nó gọi chiều dài phương pháp? Ý nghĩa của & là gì? –

+3

@DanR Có, nó gọi phương thức 'length' trên mỗi mục được tạo bởi' sort_by' - giống như dòng đầu tiên. Toán tử '&' tiền tố chuyển đổi một đối tượng (đặc biệt là đối tượng Proc hoặc đối tượng bất kỳ có phương thức 'to_proc', biểu tượng đối tượng làm) cho một khối. Trong trường hợp các ký hiệu sẽ là một khối gọi phương thức với tên đã cho trên đối số của nó (vì đó là cách 'Symbol # to_proc' được định nghĩa). – sepp2k

9

Bạn cũng có thể sử dụng sort:

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

arr = arr.sort{|x,y| x.length - y.length} làm việc quá.

Các vấn đề liên quan