我一直在盯着我在另一个问题中找到的这段代码(下面逐字复制),我知道它并不多,但它让我逃避了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;
}
}
答案 0 :(得分:9)
它将项目分组为您指定的部分数量。 i ++将为每个项目递增并应用模数运算符,以便将其放入正确数量的桶中。所以第一个项目在桶0中,第2个在桶1中,第3个在桶2中,第4个在桶0中等等...
答案 1 :(得分:6)
虽然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());