F#中的任何函数是否类似于LINQ流利语法,可以按多个表达式进行排序:
myList.OrderBy(fun x->x.Something).ThenBy(fun x->x.SomethingElse)
我喜欢这样的东西:
myList
|> Seq.sort_by(fun x->x.Something)
|> Seq.then_by(fun x->x.SomethingElse)
THX
答案 0 :(得分:48)
使用元组作为排序键:
myList |> Seq.sortBy (fun x -> x.Something, x.SomethingElse)
答案 1 :(得分:0)
由于sortBy
是defined to be stable,因此您可以使用次要键以相反的顺序进行多次排序:
myList |> Seq.sortBy (fun x -> x.SomethingElse) |> Seq.SortBy (fun x -> x.Something)
与主键比较相同的项目将保留由辅键完成的先前顺序。与两个键相同的项目将保持原始顺序。与tuple方法不同,它的优点是可以独立控制每个键的排序方式。
如果您的排序键是带符号的整数,并且您希望以降序对第二个键进行排序,那么您仍然可以使用带负号的元组方法:
myList |> Seq.sortBy (fun x -> x.Something, -x.SomethingElse)
可以说这种方法不太清楚,但可能比两次排序更快。请注意,由于溢出,它不能正确处理最小值。