如何制定执行此分组的简单LINQ查询(使用查询语法)?
答案 0 :(得分:9)
您可以按(index / chunkSize)对它们进行分组。例如:
var result =
from i in array.Select((value, index) => new { Value = value, Index = index })
group i.Value by i.Index / chunkSize into g
select g;
答案 1 :(得分:2)
对于那些喜欢LINQ方法(使用lambda表达式)的人,这里有Dimitriy Matveev's answer转换:
var result = array
.Select((value, index) => new { Value = value, Index = index })
.GroupBy(i => i.Index / chunkSize, v => v.Value);
如果您只需要value
而不是IGrouping<T1, T2>
的数组,请附加以下内容:
.Select(x => x.ToArray())
答案 2 :(得分:0)
要进行实际的分组,不应该是:
var result = array
.Select((value, index) => new { Value = value, Index = index})
.GroupBy(i => i.Index / chunk, v => v.Value);
答案 3 :(得分:0)
扩展方法(使用Jesse's answer):
public static IEnumerable<T[]> GroupToChunks<T>(this IEnumerable<T> items, int chunkSize)
{
if (chunkSize <= 0)
{
throw new ArgumentException("Chunk size must be positive.", "chunkSize");
}
return
items.Select((item, index) => new { item, index })
.GroupBy(pair => pair.index / chunkSize, pair => pair.item)
.Select(grp => grp.ToArray());
}