在 F# 中从高到低排序列表
Sort list High-to-Low in F#
List.Sort
将列表从低到高排序 - 如何从高到低排序?这有某种库函数吗?
对于数字列表:
list
|> List.sortBy (fun x -> -x)
函数(fun x -> -x)
取反数字,因此颠倒顺序。
对于一般的比较,使用 List.sortWith
和 compare
。观察 compare
中 a 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 (~-)
List.Sort
将列表从低到高排序 - 如何从高到低排序?这有某种库函数吗?
对于数字列表:
list
|> List.sortBy (fun x -> -x)
函数(fun x -> -x)
取反数字,因此颠倒顺序。
对于一般的比较,使用 List.sortWith
和 compare
。观察 compare
中 a 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 (~-)