Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按索引对项目进行分组?C#LINQ_C#_.net_Linq_Ienumerable_Grouping - Fatal编程技术网

如何按索引对项目进行分组?C#LINQ

如何按索引对项目进行分组?C#LINQ,c#,.net,linq,ienumerable,grouping,C#,.net,Linq,Ienumerable,Grouping,如果我有 var input = new int[] { 0, 1, 2, 3, 4, 5 }; 我如何将它们分组成一对 var output = new int[][] { new int[] { 0, 1 }, new int[] { 2, 3 }, new int[] { 4, 5 } }; 最好使用LINQ,可能不适用于您,但您可以在C#4.0中使用新的Zip方法 input .Select((value, index) => new { PairNum = index

如果我有

var input = new int[] { 0, 1, 2, 3, 4, 5 };
我如何将它们分组成一对

var output = new int[][] { new int[] { 0, 1 }, new int[] { 2, 3 }, new int[] { 4, 5 } };

最好使用LINQ,可能不适用于您,但您可以在C#4.0中使用新的Zip方法

input
   .Select((value, index) => new { PairNum = index / 2, value })
   .GroupBy(pair => pair.PairNum)
   .Select(grp => grp.Select(g => g.value).ToArray())
   .ToArray()
使用方法:

使用方法:


您的示例没有显示0,1是如何关联的,以便可以对它们进行分组。或者你只是把他们按顺序分组成两人一组?我想按顺序分组成两人一组。你打高尔夫球吗?
var indexedNumbers = input.Select((number, index) => new { Index = index, Number = number });

var pairs =
    from indexedNumber in indexedNumbers
    group indexedNumber by indexedNumber.Index / 2 into indexedNumberPair
    select indexedNumberPair.Select(indexedNumber => indexedNumber.Number);

var arrays = pairs.Select(pair => pair.ToArray()).ToArray();

var input = new int[] { 0, 1, 2, 3, 4, 5 };
IEnumerable evens = input.Where((element, index) => index % 2 == 0);
IEnumerable odds = input.Where((element, index) => index % 2 == 1);
var results = evens.Zip(odds, (e, o) => new[] { e, o }).ToArray();
input
    .Select((number, index) => new { index , number})
    .ToLookup(_ => _.index / 2, _ => _.number)
    .Select(_ => _.ToArray())
    .ToArray();
input
    .Zip(input.Skip(1), (_, __) => new[] {_, __})
    .Where((_, index) => index % 2 == 0)
    .ToArray();