Я ищу лучший способ разделить список (или seq), чтобы группы имели заданный размер.
например скажем, я хочу сгруппировать с размером 2 (это может быть любое другое число):
let xs = [(a,b,c); (a,b,d); (y,z,y); (w,y,z); (n,y,z)]
let grouped = partitionBySize 2 input
// => [[(a,b,c);(a,b,d)]; [(y,z,y);(w,y,z)]; [(n,y,z)]]
Очевидным способом реализации partitionBySize было бы добавление позиции к каждому кортежу в списке ввода, чтобы он стал
[(0,a,b,c), (1,a,b,d), (2,y,z,y), (3,w,y,z), (4,n,y,z)]
, а затем используйте GroupBy с
xs |> Seq.ofList |> Seq.GroupBy (function | (i,_,_,_) -> i - (i % n))
Однако это решение выглядит не очень элегантно для меня.
Есть ли лучший способ реализовать эту функцию (может быть, с помощью встроенной функции)?