Tôi có một số Array
của Array
mà tôi muốn sắp xếp theo độ dài dài nhất đến ngắn nhất. Tôi đạt được điều này một cách dễ dàng đủ với một sort_by
Sắp xếp Mảng Mảng theo chiều dài với mã vạch
> a = [ [1, 2, 9],
[4, 5, 6, 7],
[1, 2, 3] ]
> a.sort_by(&:length).reverse # or a.sort_by {|e| e.length}.reverse
=> [[4, 5, 6, 7], [1, 2, 3], [1, 2, 9]]
Những gì tôi muốn, tuy nhiên là phải có một loại tie-breaker cho danh sách dài bằng nhau. Nếu độ dài của hai danh sách bằng nhau, danh sách có mục nhập cuối cùng là lớn hơn sẽ đến trước. Vì vậy, ở trên, [1, 2, 9]
và [1, 2, 3]
phải được chuyển.
Tôi không quan tâm đến trường hợp hai danh sách có cả chiều dài bằng nhau và phần tử cuối cùng bằng nhau, chúng có thể theo thứ tự bất kỳ nếu điều đó xảy ra. Tôi không biết nếu/làm thế nào tôi có thể đạt được điều này với ruby được xây dựng trong phân loại.
Sử dụng một khối, như trong ví dụ trong tài liệu: http://www.ruby-doc.org/core-2.0/Enumerable.html#method-i-sort_by – SheetJS