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