Luc*_*tti 30 .net linq sorting f#
F#中的任何函数是否类似于LINQ流畅语法,可以按多个表达式进行排序:
myList.OrderBy(fun x->x.Something).ThenBy(fun x->x.SomethingElse)
Run Code Online (Sandbox Code Playgroud)
我喜欢这样的东西:
myList
|> Seq.sort_by(fun x->x.Something)
|> Seq.then_by(fun x->x.SomethingElse)
Run Code Online (Sandbox Code Playgroud)
谢谢
Tim*_*son 52
使用元组作为排序键:
myList |> Seq.sortBy (fun x -> x.Something, x.SomethingElse)
Run Code Online (Sandbox Code Playgroud)
因为sortBy被定义为 stable,您可以多次排序,以相反的顺序使用辅助键:
myList |> Seq.sortBy (fun x -> x.SomethingElse) |> Seq.SortBy (fun x -> x.Something)
Run Code Online (Sandbox Code Playgroud)
主键比较相同的项目将保留由辅助键完成的先前排序。比较两个键相同的项目将按原始顺序排列。这有一个优点(与元组方法不同),您可以独立控制每个键的排序是否按降序排列。
如果您的排序键是有符号整数并且您希望按降序对辅助键进行排序,您仍然可以使用使用否定的元组方法:
myList |> Seq.sortBy (fun x -> x.Something, -x.SomethingElse)
Run Code Online (Sandbox Code Playgroud)
这种方法可以说不太清楚,但可能比排序两次更快。请注意,由于溢出,它无法正确处理最小值。
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |