寻找一种将LINQ组合为n
元素的方法。LINQ数字分组
即:
{1,2,3,4,5,6,7,8,9}
:
- 分组通过2:
{{1,2},{3,4},{5,6},{7,8},{9}}
- 分组通过3:
{{1,2,3},{4,5,6},{7,8,9}}
- 分组通过4:
{{1,2,3,4},{5,6,7,8},{9}}
- 等等...
我现在所能想到的做的唯一方法是使用匿名类型生成组索引,然后按该索引进行分组。如果可能,我正在寻找更清洁的解决方案。
例子:
int groupSize = n;
int groupCount = 0;
int groupNum = 0;
IEnumerable<T> items;
IEnumerable<IGrouping<int,T>> groups = items
.Select(i => new
{
Index = ((groupCount++) % groupSize == 0) ? groupNum++ : groupNum,
Item = i
})
.GroupBy(c => c.Index, d => d.Item);
我想避免的事情这个讨厌如果可能的话。
如果有更好的方法,这将是非常棒的,但我不认为这是真的。 – 2010-06-04 20:07:55
这称为分区。 – SLaks 2010-06-04 20:08:50
我的意思是,我总是可以将上面的内容写成扩展函数,我只是不知道延迟执行如何处理类似的事情。我更喜欢LINQ'y尽可能的东西:) – Aren 2010-06-04 20:10:07