2017-08-25 6 views
4

これで私は迷っています。私はオブジェクトのリストを持っています。各オブジェクトは、その中に一意でないIDとして存在します。私はこのIDでグループ化したいが、私の人生のためにこれを行う方法を理解することはできない。リストをFのリストリストにグループ化する

これは、データがこの

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

のように見えるかもしれません、私は

type fooObject = { 
    Id : int 
    Info : string 
} 

let fooObjects: fooObject list 

私は、最終的な結果は次のようになります

let fooObjectsGroupedById : fooObject list list 

のようなものを希望しているものです

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

答えて

7

使用List.groupBy:答えを

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

感謝。 sndとは何ですか? 'groupBy'がタプルのリストを返すので、 –

+1

' snd'が使われます。最初の項目はグループ化キー(あなたの場合はId値)で、2番目のタプル項目はすべての一致のリストです。関数['snd'](https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/operators.snd%5B't1,'t2%5D-function-%5Bfsharp%5D)は、2番目の項目タプルから –

+0

あなたに感謝します。 –

関連する問題