我一直在盯着这个代码,我在另一个问题中找到了(下面逐字复制),我知道它并不多,但它让我逃避了i ++%部分的工作原理.
void Main()
{
int[] a = new [] { 10, 3, 5, 22, 223 };
a.Split(3).Dump();
}
static class LinqExtensions
{
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> list, int parts)
{
int i = 0;
var splits = from item in list
group item by i++ % parts into part
select part.AsEnumerable();
return splits;
}
}
Run Code Online (Sandbox Code Playgroud)

它将项目分组为您指定的部件数量.i ++将为每个项目递增并应用模数运算符,以便将其放入正确数量的桶中.所以第一个项目在桶0中,第2个在桶1中,第3个在桶2中,第4个在桶0中等等...
虽然Keith Rousseau是正确的,但我认为这个想法是实现这一目标的一种相当糟糕的方式.您可以通过以下方式更纯粹地实现它(即,无需改变捕获的变量):
var splits = list.Select((item, index) => new { Item = item, Index = index })
.GroupBy(pair => pair.Index % parts, element => element.Item)
.Select(group => group.AsEnumerable());
Run Code Online (Sandbox Code Playgroud)