Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

Сгруппировать последовательно идущие цифры в массив

Есть объект List для примера пусть будет
var src = new List {0,1,3,5,6,7,9};
В исходном списке дубликаты не возможны, т.е. {0,1,1,3,5} не рассматривается. Список предварительно отсортирован
как написать функцию которая будет возвращать список объектов к котором будут последовательно идущие цифры, т.е. необходимо получить следующий результат:
var result = new List> { new List {0,1}, new List {3}, new List {5,6,7}, new List {9} };
мне в голову приходит только вариант сделать в цикле for но мне кажется что это можно сделать более элегантней с использованием linq


Ответ

В данном случае можно использовать метод Aggregate, с начальным значением для аккумулятора.
src.Aggregate(new List>(), (acc, cur) => { //проверяем что мы, либо зашли в первый раз, либо разница между элементами больше 1. if (acc.Count == 0 || cur - acc.Last().Last() > 1) { //добавляем новый список с текущим элементом acc.Add(new List { cur }); } else { //иначе добавляем в последний список acc.Last().Add(cur); }
//возвращаем аккумулятор return acc; });

Комментариев нет:

Отправить комментарий