在 F# 中从高到低排序列表

Sort list High-to-Low in F#

List.Sort

将列表从低到高排序 - 如何从高到低排序?这有某种库函数吗?

对于数字列表:

list
|> List.sortBy (fun x -> -x)

函数(fun x -> -x)取反数字,因此颠倒顺序。

对于一般的比较,使用 List.sortWithcompare。观察 comparea b 的顺序:

> List.sortWith (fun a b -> compare a b) ["a";"s";"d";"f"];;
val it : string list = ["a"; "d"; "f"; "s"]
> List.sortWith (fun a b -> compare b a) ["a";"s";"d";"f"];;
val it : string list = ["s"; "f"; "d"; "a"]

如果您查看链接线程 F# Seq.sortBy in descending order,则在使用 List.sortBy (fun x -> -x) 时可能会溢出。准确地说应该是:

List.sortBy (fun x -> -x-1)

在 F# 4.0(随 Visual Studio 2015 预览版一起提供)中,有 sortDescending/sortByDescending 个函数用于此目的。

您可以使用

list
|> List.sortDescending

list
|> List.sortByDescending id

https://github.com/fsharp/FSharpLangDesign/blob/master/FSharp-4.0/ListSeqArrayAdditions.md 查看新核心库函数的完整列表。

您可以使用 List.sortBy 按自定义函数排序,并使用一元减号运算符 ~- 作为紧凑表示法中的此类函数:

let list = [1..10]
list |> List.sortBy (~-)