こんにちは、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でこれを行うにはどうすればよいですか?