【问题标题】:Grouping a list into a list of lists in F#将列表分组到 F# 中的列表列表中
【发布时间】:2017-08-25 17:22:45
【问题描述】:

好吧,我迷路了。我有一个对象列表。每个对象在其中作为一个非唯一 ID。我想在这个 ID 上进行分组,但对于我来说,我无法弄清楚如何做到这一点。

这就是我所拥有的

type fooObject = {
     Id : int
     Info : string
}

let fooObjects: fooObject list

数据可能看起来像这样

[ { Id = 1 ; Data = "foo" } ; { Id = 1 ; Data = "also foo" } ; { Id = 2 ; Data = "Not foo" } ]

我想要类似的东西

let fooObjectsGroupedById : fooObject list list

所以最终的结果应该是这样的

[ [{ Id = 1 ; Data = "foo" } ; { Id = 1 ; Data = "also foo" } ] ; [{ Id = 2 ; Data = "Not foo" }]]

【问题讨论】:

    标签: f#


    【解决方案1】:

    使用List.groupBy:

    let groupById fooObjects =
        List.groupBy (fun foo -> foo.Id) fooObjects
            |> List.map snd
    

    【讨论】:

    • 感谢您的回答。什么是snd?
    • 使用 snd 是因为 groupBy 返回一个元组列表,其中第一项是分组键(在您的情况下是 Id 值),第二个元组项是所有比赛。函数snd 从元组中拉出第二项
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多