【问题标题】:Sort list that contains a Tuple (String*Seq<String>)包含元组的排序列表 (String*Seq<String>)
【发布时间】:2014-08-19 15:12:05
【问题描述】:

我需要对类型为的列表进行排序

ListToSort val: (string*Seq<string>) list

我的想法是按序列的长度对这个列表进行排序

我正在使用命令 List.Sortby snd 和 Seq.Length 但我无法使其工作..

有什么想法吗? 谢谢

编辑: 代码的一个更清晰的想法是(我要排序的列表是由 Seq.grouby 创建的,它将原始列表中的重复元素分组)

let grouped = 
   OriginalList
    |> Seq.groupBy  (fun value -> if value = value then value else "else" )
    |> Seq.toList
    |> Seq.Sortby.... // sort the list by the length of the sequence 

【问题讨论】:

  • 如果您向我们展示您的尝试,我们可以更直接地解决令您困惑的问题。
  • 或许ListToSort |&gt; List.sortBy(fun (_, s) -&gt; Seq.length s)
  • 列表中的元素是元组。要访问元组的第二部分(序列),可以使用内置函数snd
  • 感谢 vcsjones!成功了!
  • (fun value -&gt; if value = value then value else "else" ) 可以替换为id

标签: list sorting f# tuples


【解决方案1】:

添加行

|> List.sortBy(fun (_, s) -> Seq.length s) –  

由 vcsjones 建议使其工作

let grouped = 
 OriginalList
|> Seq.groupBy  (fun value -> if value = value then value else "else" )
|> Seq.toList
|> List.sortBy(fun (_, s) -> Seq.length s) –

这返回了排序的列表!!

【讨论】:

  • 这也可以是|&gt; List.sortBy (snd &gt;&gt; Seq.length)
猜你喜欢
  • 2018-09-20
  • 1970-01-01
  • 2011-07-06
  • 2015-01-22
  • 2022-08-23
  • 2013-01-16
  • 2014-03-01
  • 1970-01-01
  • 2022-07-16
相关资源
最近更新 更多