C# LINQ数值分组
正在寻找使用LINQ对C# LINQ数值分组,c#,.net,linq,C#,.net,Linq,正在寻找使用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} 等等 目前我唯一能想到的方法是使用匿名类型生成一个组索引,然后根据该索引进行分组。如果可能的话,我正在寻找一种更清洁的解决方案 var values = new []{ 1, 2, 3, 4, 5, 6, 7, 8
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}
- 等等
var values = new []{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
groups = values.Select((v, i) => new { index = i, value = v })
.GroupBy(k => k.index / n, e => e.value);
示例:
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);
intgroupsize=n;
int groupCount=0;
int groupNum=0;
i数不清的项目;
IEnumerable groups=项目
.选择(i=>new
{
索引=((groupCount++)%groupSize==0)?groupNum++:groupNum,
项目=一
})
.GroupBy(c=>c.索引,d=>d.项目);
如果可能的话,我想避免这种讨厌的事情。我已经回答了一个类似的问题。它仍然使用匿名类型,但我不认为它像您的示例那样“令人讨厌”。如果有更好的方法,那将非常棒,但我认为没有。我的意思是,我总是可以将上面的内容作为扩展函数编写,我只是不知道延迟执行如何处理类似的内容。我更希望事情尽可能的顺利:)!!!索引,我忘了
。选择可以返回它!谢谢你!
var values = new []{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
groups = values.Select((v, i) => new { index = i, value = v })
.GroupBy(k => k.index / n, e => e.value);