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

да.
В принципе, продолжать не имеет смысла, уже у меня уже написано расширение.
Правда не для IEnumerable<int>, а для List<int>. Поскольку данный метод может быть в составе других Linq-вызовов, и получение размера или элемента по индексу будет вести к тому, что каждый раз будет дергаться вся цепочка. А на больших массивах данных это будет вести к неоправданным временным затратам.
...
Рейтинг: 0 / 0
23.10.2016, 17:46
    #39332342
Нахлобуч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Набор диапазонов из списка чисел
Если последовательность отсортирована по возрастанию, то из чисел нужно вычесть их порядковые номера и сгруппировать по разности.
...
Рейтинг: 0 / 0
23.10.2016, 18:37
    #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
23.10.2016, 18:38
    #39332353
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Набор диапазонов из списка чисел
Shocker.ProКаждый элемент не самодостаточен в плане определения такого ключа, необходим просмотр как предыдущего, так и следующего элемента. Так что полюбому требуется проход по списку. А коли требуется проход - то нет никакого смысла возиться с Linq - проще написать свой цикл. Можно даже оформить его в собственный метод расширения для IEnumerable<int> и тогда можно будет спокойно встраивать его в цепочки Linq-вызовов.

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

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


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