powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Набор диапазонов из списка чисел
11 сообщений из 11, страница 1 из 1
Набор диапазонов из списка чисел
    #39331882
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно со списка типа:
number12368911121314
сделать набор диапазонов
range1-368-911-14
Можно сгруппировать по этим диапазонам и использовать функцию LINQ Aggregate().
Но вопрос в том, как вычислить ключ для группировки, как понять, что числа должны группироваться в эти диапазоны?
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39331886
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждый элемент не самодостаточен в плане определения такого ключа, необходим просмотр как предыдущего, так и следующего элемента. Так что полюбому требуется проход по списку. А коли требуется проход - то нет никакого смысла возиться с Linq - проще написать свой цикл. Можно даже оформить его в собственный метод расширения для IEnumerable<int> и тогда можно будет спокойно встраивать его в цепочки Linq-вызовов.
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39331959
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Novichok1-3
Это строковое представление диапазона?
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39332096
Фотография _Novichok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,

да.
В принципе, продолжать не имеет смысла, уже у меня уже написано расширение.
Правда не для IEnumerable<int>, а для List<int>. Поскольку данный метод может быть в составе других Linq-вызовов, и получение размера или элемента по индексу будет вести к тому, что каждый раз будет дергаться вся цепочка. А на больших массивах данных это будет вести к неоправданным временным затратам.
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39332342
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если последовательность отсортирована по возрастанию, то из чисел нужно вычесть их порядковые номера и сгруппировать по разности.
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39332352
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч,

Типа так?

Код: c#
1.
2.
3.
4.
5.
6.
var list = new [] { 1, 2, 3, 6, 8, 9, 11, 12, 13, 14 };
		
var groups = list
  .Select((e, i) => new { e, r = e - i })
  .GroupBy(g => g.r, v => v.e)
  .Select(p => p.Count() == 1 ? p.First().ToString() : p.First() + "-" + p.Last());
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39332353
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProКаждый элемент не самодостаточен в плане определения такого ключа, необходим просмотр как предыдущего, так и следующего элемента. Так что полюбому требуется проход по списку. А коли требуется проход - то нет никакого смысла возиться с Linq - проще написать свой цикл. Можно даже оформить его в собственный метод расширения для IEnumerable<int> и тогда можно будет спокойно встраивать его в цепочки Linq-вызовов.

Не обязательно смотреть вперёд и обратно, если коллекция отсортирована.
И на чистом LINQ задача решается )
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39332638
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, ага.
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39333145
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дайте намёк ))
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39333278
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДайте намёк ))
?

Выше же написали..
...
Рейтинг: 0 / 0
Набор диапазонов из списка чисел
    #39333943
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, пропустил это сообщение, виноват
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Набор диапазонов из списка чисел
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]