Добавление в уже отсортированный список
От: Passerby  
Дата: 14.12.19 03:12
Оценка:
Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?
Re: Добавление в уже отсортированный список
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.12.19 05:42
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?

https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.sortedlist-2?view=netframework-4.8
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Добавление в уже отсортированный список
От: Kolesiki  
Дата: 14.12.19 09:36
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>generic.sortedlist-2


Да, но где сказано, что decimal — уникальные?
Re[3]: Добавление в уже отсортированный список
От: Passerby  
Дата: 14.12.19 12:30
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Здравствуйте, Sinclair, Вы писали:


S>>generic.sortedlist-2


K>Да, но где сказано, что decimal — уникальные?


И decimal не уникально и ключом, если бы делал словарь, является string.
Re[3]: Добавление в уже отсортированный список
От: fmiracle  
Дата: 14.12.19 13:01
Оценка:
Здравствуйте, Kolesiki, Вы писали:

S>>generic.sortedlist-2

K>Да, но где сказано, что decimal — уникальные?

SortedList<decimal, int> где value — число повторений.
Каждое число либо вставляешь либо увеличиваешь счетчик.
Re: Добавление в уже отсортированный список
От: fmiracle  
Дата: 14.12.19 13:04
Оценка: 5 (2) +2
Здравствуйте, Passerby, Вы писали:

P>Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?


Такой вставки, чтобы просто вставить — и он добавит куда надо — нет.
А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять.
Re[2]: Добавление в уже отсортированный список
От: · Великобритания  
Дата: 27.12.19 15:11
Оценка:
Здравствуйте, fmiracle, Вы писали:

P>>Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?

Это тебе надо специальную структуру данных — Priority Queue называется.
Впрочем, т.к. стандартной реализации нет и если с перформансом проблем нет, то можно не париться, скорее всего.

F>Такой вставки, чтобы просто вставить — и он добавит куда надо — нет.

F>А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять.
А толку быстро? При вставке всё равно придётся всё двигать.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Добавление в уже отсортированный список
От: fmiracle  
Дата: 27.12.19 15:21
Оценка:
F>>Такой вставки, чтобы просто вставить — и он добавит куда надо — нет.
F>>А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять.
·>А толку быстро? При вставке всё равно придётся всё двигать.

Я больше про то, что там все просто: ~idx и вот тебе готовый индекс куда вставить.

А придумывать про оптимизацию нет смысла без задачи задачи. Лично я глубоко подозреваю, что у ТС проблема быстродействия вообще не стоит. А если стоит, то надо смотреть условия. Нафантазировать можно разного, в т.ч. и где сортированный список+бинарный поиск будет весьма шустрым решением (если вставки почти всегда в конец списка, и извлечение тоже с конца). Но фантизировать без задачи смысла мало.
Re[4]: Добавление в уже отсортированный список
От: · Великобритания  
Дата: 27.12.19 16:33
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>>>Такой вставки, чтобы просто вставить — и он добавит куда надо — нет.

F>>>А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять.
F>·>А толку быстро? При вставке всё равно придётся всё двигать.
F>Я больше про то, что там все просто: ~idx и вот тебе готовый индекс куда вставить.
Нужно ещё убедиться, что возвращается нужный индекс при дупликатах. Доки ничего такого не говорят, значит докам может вернуться что попало. Т.е. если в списке [("A", 10), ("B", 10)] искать 10 то может вернуться любой индекс и иногда ВНЕЗАПНО результат может быть не такой как ожидается. Priority Queue работает как очередь, сохраняет порядок вставки.
Тупой перебор эл-тов списка будет не сильно сложнее, зато реализация будет работать детерминированно.

F>А придумывать про оптимизацию нет смысла без задачи задачи.

Это да.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Добавление в уже отсортированный список
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.12.19 16:46
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Здравствуйте, Sinclair, Вы писали:


S>>generic.sortedlist-2


K>Да, но где сказано, что decimal — уникальные?

https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.sorteddictionary-2?view=netframework-4.8
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.