可以在LINQ中按Count分组吗?

时间:2009-10-19 16:13:24

标签: c# linq grouping

这可能是不可能的,也可能是显而易见的,我一直在过去。

我有一个对象列表(比如说这个例子的整数):

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };

我希望能够成对分组而不考虑顺序或任何其他比较,返回一个新的IGrouping对象。

list.GroupBy(i => someLogicToProductPairs);

我可能正在从错误的角度处理这个问题,但目标是通过恒定的容量对一组对象进行分组。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

你的意思是这样的:

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };

IEnumerable<IGrouping<int,int>> groups =
   list
   .Select((n, i) => new { Group = i / 2, Value = n })
   .GroupBy(g => g.Group, g => g.Value);

foreach (IGrouping<int, int> group in groups) {
   Console.WriteLine(String.Join(", ", group.Select(n=>n.ToString()).ToArray()));
}

输出

1, 2
3, 4
5, 6

答案 1 :(得分:1)

你可以做这样的事......

 List<int> integers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

 var p = integers.Select((x, index) => new { Num = index / 2, Val = x })
                 .GroupBy(y => y.Num);

答案 2 :(得分:0)

    int counter = 0;
    // this function returns the keys for our groups.
    Func<int> keyGenerator =
      () =>
      {
         int keyValue = counter / 2;
         counter += 1;
         return keyValue;
      };

   var groups = list.GroupBy(i => {return keyGenerator()});