2009-05-05 28 views
21

Có hàm trong F # tương tự như cú pháp thông thạo LINQ cho sắp xếp theo nhiều biểu thức:OrderBy ThenBy trong F #

myList.OrderBy(fun x->x.Something).ThenBy(fun x->x.SomethingElse) 

Tôi rất muốn một cái gì đó như:

myList 
|> Seq.sort_by(fun x->x.Something) 
|> Seq.then_by(fun x->x.SomethingElse) 

Thx

Trả lời

40

Sử dụng một tuple như sắp xếp của bạn chính:

myList |> Seq.sortBy (fun x -> x.Something, x.SomethingElse) 
+1

Đúng vậy, các bộ sắp xếp trong thứ tự từ điển, vì vậy đặt nhiều phím theo thứ tự từ trái sang phải trong một tuple không chỉ là những gì được mong muốn . – Brian

+0

@ tim-robinson bạn có biết làm thế nào người ta có thể làm kiểu sắp xếp này với phân loại tự nhiên/alphanum cho mỗi mục trong khóa? – Erick

+0

@Erick Tôi muốn thực hiện IComparable bằng tay và gọi Seq.sortBy (gói khóa sắp xếp trong triển khai IComparable tùy chỉnh của tôi) hoặc gọi System.Linq.Enumerable.OrderBy (và chuyển IComparable của tôi thành tham số). –

1

Bạn có thể tìm thấy một số thuật toán sắp xếp ở đây hữu ích, vì tôi không biết chờ đợi trong F # để sắp xếp, ngoài việc sử dụng chức năng .NET.

http://cs.hubfs.net/forums/thread/3876.aspx

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