Как сгруппировать элементы по индексу? С# LINQ

Предположим, у меня есть

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


person Jader Dias    schedule 17.08.2009    source источник
comment
В вашем примере не показано, как связаны 0,1, чтобы их можно было сгруппировать. Или вы просто группируете их последовательно по парам?   -  person JustLoren    schedule 18.08.2009
comment
Я хочу сгруппировать последовательно по парам   -  person Jader Dias    schedule 18.08.2009


Ответы (2)


Вероятно, это не применимо к вам, но вы можете использовать новый метод Zip в C# 4.0.


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

person Mike Two    schedule 17.08.2009

Используя метод ToLookup:

input
    .Select((number, index) => new { index , number})
    .ToLookup(_ => _.index / 2, _ => _.number)
    .Select(_ => _.ToArray())
    .ToArray();

Используя метод Zip:

input
    .Zip(input.Skip(1), (_, __) => new[] {_, __})
    .Where((_, index) => index % 2 == 0)
    .ToArray();
person Andriy Tolstoy    schedule 30.08.2017
comment
Вы играете в гольф в brainfuck? ???? - person Caius Jard; 06.04.2021