IList<int> numbers = new List<int> {1, 2, 3, 4, 5, 6, 7};
var grouped = numbers.GroupBy(num =>
{
if (numbers.IndexOf(num) % 2 == 0)
{
return numbers.IndexOf(num) + 1;
}
return numbers.IndexOf(num);
});
Если вам нужна последняя пара, заполненная нулями, вы можете просто добавить ее перед группировкой, если список нечетный.
if (numbers.Count() % 2 == 1)
{
numbers.Add(0);
}
Другой подход может быть:
var groupedIt = numbers
.Zip(numbers.Skip(1).Concat(new[]{0}), Tuple.Create)
.Where((x,i) => i % 2 == 0);
Или вы используете MoreLinq, который имеет множество полезных расширений:
IList<int> numbers = new List<int> {1, 2, 3, 4, 5, 6, 7};
var batched = numbers.Batch(2);