19

私が持っているとしましょう

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を使用する

4

4 に答える 4

40
input
   .Select((value, index) => new { PairNum = index / 2, value })
   .GroupBy(pair => pair.PairNum)
   .Select(grp => grp.Select(g => g.value).ToArray())
   .ToArray()
于 2009-08-17T21:07:55.020 に答える
4

おそらくあなたには当てはまりませんが、C# 4.0 で新しい Zip メソッドを使用できます。


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();

于 2009-08-17T21:33:11.163 に答える
0
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();
于 2009-08-17T21:15:42.057 に答える