- Seq.groupByはseq中の要素に対応する整数値でseqの要素をグループに分ける。
seq {1..100} |> Seq.groupBy (fun x -> x % 2) // seq [(1, seq [1; 3; 5; 7; ...]); (0, seq [2; 4; 6; 8; ...])]
// シーケンスをn個毎のサブシーケンスに分ける
let split n (sq : seq<_>) =
Seq.mapi (fun idx elem -> idx, elem) sq
|> Seq.groupBy (fun (idx, _) -> idx / n)
|> Seq.map (snd >> Seq.map snd)
// シーケンスをn個おきのサブシーケンスに分ける
let everyNth n (sq : seq<_>) =
Seq.mapi (fun idx elem -> idx, elem) sq
|> Seq.groupBy (fun (idx, _) -> idx % n)
|> Seq.map (snd >> Seq.map snd)
seq {1..100} |> split 3 // = seq [seq [1; 2; 3]; seq [4; 5; 6]; seq [7; 8; 9]; seq [10; 11; 12]; ...]
seq {1..100} |> everyNth 3 // = seq [seq [1; 4; 7; 10; ...]; seq [2; 5; 8; 11; ...]; seq [3; 6; 9; 12; ...]]