如何在F#中对变量进行排序?

San*_*aus 0 f# f#-interactive

我如何按变量对列表进行排序但是按升序排序?

就像是:

Data |> List.sortBy(fun t -> t.Date,ascending(t.Value))
Run Code Online (Sandbox Code Playgroud)

以上就是一个例子,我知道如果运行它将不起作用.

Tom*_*cek 5

根据您的示例,您似乎想要使用多个排序键,其中一些应按升序排列,而其他键则按降序排列.我认为这是一个任何其他问题都没有回答的情景.

通常,您可以使用元组在F#中使用多个排序键.F#具有功能List.sortBy,List.sortByDescending可以为您提供两种可能的顺序:

data |> Seq.sortByDescending (fun x -> x.FirstKey, x.SecondKey)
Run Code Online (Sandbox Code Playgroud)

但是,这样两个键的排序顺序是相同的.没有简单的方法可以在一个订单中使用一个密钥而在另一个订单中使用另一个密钥.在许多情况下,您可以使用数字减去并执行以下操作:

data |> Seq.sortByDescending (fun x -> x.FirstKey, -x.SecondKey)
Run Code Online (Sandbox Code Playgroud)

由于MaxInt价值观,这不完全是防弹的,但它可能经常起作用.在F#查询表达式(受LINQ工作原理的启发)中,您可以使用sortBythenBy(或sortByDescendingthenByDescending)使用多个排序键:

query {
  for x in data do
  sortByDescending x.FirstKey
  thenBy x.SecondKey }
Run Code Online (Sandbox Code Playgroud)

这里,第一个键将用于降序排序,当有多个具有相同的项时FirstKey,第二个键将用于该组内的升序排序.我怀疑这可能是你在一般情况下所需要的 - 但有点不幸的是,没有很好的方法用管道语法编写它.