将列表分组到F#中的列表列表

Ant*_*ell 4 f#

好的,所以我迷失在这一个.我有一个对象列表.每个对象都作为非唯一ID.我想分组这个ID,但对于我的生活,我无法弄清楚如何做到这一点.

这就是我所拥有的

type fooObject = {
     Id : int
     Info : string
}

let fooObjects: fooObject list
Run Code Online (Sandbox Code Playgroud)

数据可能看起来像这样

[ { Id = 1 ; Data = "foo" } ; { Id = 1 ; Data = "also foo" } ; { Id = 2 ; Data = "Not foo" } ]
Run Code Online (Sandbox Code Playgroud)

我想要的东西

let fooObjectsGroupedById : fooObject list list
Run Code Online (Sandbox Code Playgroud)

所以最终结果看起来像这样

[ [{ Id = 1 ; Data = "foo" } ; { Id = 1 ; Data = "also foo" } ] ; [{ Id = 2 ; Data = "Not foo" }]]
Run Code Online (Sandbox Code Playgroud)

Cha*_*ert 7

用途List.groupBy:

let groupById fooObjects =
    List.groupBy (fun foo -> foo.Id) fooObjects
        |> List.map snd
Run Code Online (Sandbox Code Playgroud)