C# 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

正在寻找使用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, 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);