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

时间:2015-01-22 03:54:56

标签: sorting f#

List.Sort

从低到高对列表进行排序 - 如何从高到低排序?这有什么样的库函数吗?

3 个答案:

答案 0 :(得分:6)

有关数字列表:

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

函数(fun x -> -x)否定了数字,因此颠倒了顺序。

对于一般的可比较广告,请将List.sortWithcompare一起使用。观察a bcompare的排序:

> 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"]

答案 1 :(得分:5)

如果您查看了链接的帖子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的新核心库函数的完整列表。

答案 2 :(得分:1)

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

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