【发布时间】:2011-02-27 23:26:54
【问题描述】:
寻找一种使用 LINQ 将 n 元素集分组的方法。
即:
{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);
如果可能的话,我想避免这种讨厌的事情。
【问题讨论】:
-
如果有更好的方法那就太好了,但我认为没有。
-
我的意思是,我总是可以将上面的代码写成一个扩展函数,我只是不知道延迟执行会如何处理这样的事情。我希望事情尽可能 LINQ'y :)