1

こんにちは、seq.groupby 関数を拡張しようとしています。単一の引数でこれが機能し、ここで前に議論されましたここ、キーコードが繰り返されます:

let group_fold key value fold acc seq =
seq |> Seq.groupBy key 
    |> Seq.map (fun (key, seq) -> (key, seq |> Seq.map value |> Seq.fold fold acc))


let tuples = [("A",12); ("A",10); ("B",1);  ("C",2); ("C",1)]

let regular = group_fold fst snd (+) 0 tuples 
let piped = tuples  |> group_fold fst snd (+) 0

同じことをしたいのですが、複数のグループ化引数を使用します。これは私が試したものです:

let tuples = [("A", "B", "C", 12); ("A", "B", "C", 10); ("B","B","B",1);  ("C","B","B",2); ("C","B","B", 1)]

let group_fold key1 key2 key3 value fold acc seq =
    seq |> Seq.groupBy (key1 & key2 & key3) 
        |> Seq.map (fun (key1, key2, key3, seq) -> (key1, key2, key3, seq |> Seq.map value |> Seq.fold fold acc))

let piped = tuples  |> group_fold fst snd trd fth (+) 0

複数のアイテムによるこのグループ化は機能していないようです。私はC#で次のようにsthを行うことを知っています:

tuples.GroupBy(a => new { a.fst, a.snd, a.trd})

Fsharpでこれを行うにはどうすればよいですか?

4

1 に答える 1