LINQ: получить минимальные и максимальные значения последовательности чисел, разделенных на подпоследовательности

как я могу разбить последовательность чисел на подгруппы чисел и получить локальный минимум и максимум подгрупп с linq?

Если у меня есть последовательность, скажем 11 элементов {3, 2, 5, 9, 9, 6, 7, 2, 5, 11, 2}
Я хочу разбить это на подгруппы с 3 или менее предметами.

Итак, я получаю следующие 4 подгруппы: {3, 2, 5}, {9, 9, 6}, {7, 2, 5}, {11, 2}

Конечные возвращаемые значения выражения LinQ (получение min и max для каждой группы) должны быть 2, 5, 6, 9, 2, 7, 2, 11

ТИА, Саша

Ответ 1

Это должно сделать это.

var numbers = new[] { 3, 2, 5, 9, 9, 6, 7, 2, 5, 11, 2 };
var query = from p in numbers.Select((n, i) => new { n, Group = i / 3 })
            group p.n by p.Group into g
            from n in new[] { g.Min(), g.Max() }
            select n;

Ответ 2

Хорошо, используя MoreLINQ Batch метод для группировки, вы можете использовать:

var query = source.Batch(3, batch => new[] { batch.Min(), batch.Max() })
                  .SelectMany(x => x);