【发布时间】:2014-05-28 20:26:58
【问题描述】:
我不知道如何将项目列表分组为(例如)不超过 3 个项目的组的最佳方法。我已经创建了下面的方法,但是在返回之前没有在组上执行ToList,如果列表被多次枚举,我就会遇到问题。
第一次枚举是正确的,但任何额外的枚举都会被丢弃,因为两个变量(i 和 groupKey)似乎在迭代之间被记住了。
所以问题是:
- 有没有更好的方法来实现我想要实现的目标?
-
只是在结果组离开此方法之前列出结果组 真是个坏主意?
public static IEnumerable<IGrouping<int, TSource>> GroupBy<TSource> (this IEnumerable<TSource> source, int itemsPerGroup) { const int initial = 1; int i = initial; int groupKey = 0; var groups = source.GroupBy(x => { if (i == initial) { groupKey = 0; } if (i > initial) { //Increase the group key if we've counted past the items per group if (itemsPerGroup == initial || i % itemsPerGroup == 1) { groupKey++; } } i++; return groupKey; }); return groups; }
【问题讨论】:
-
看看MoreLINQ的
Batch方法(NuGet提供的库)
标签: c# linq group-by grouping partitioning