Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?
Здравствуйте, 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
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Passerby, Вы писали:
P>Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?
Такой вставки, чтобы просто вставить — и он добавит куда надо — нет.
А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять.
Здравствуйте, fmiracle, Вы писали:
P>>Есть List<(string,decimal)> в котором несколько членов. Список отсортирован по убыванию decimal. Для вставки нового члена (string,decimal), чтобы сохранилась сортировка, нужно писать код в котором сравнивать этот член с имеющимися или есть соответствующий метод или класс в NET?
Это тебе надо специальную структуру данных — Priority Queue называется.
Впрочем, т.к. стандартной реализации нет и если с перформансом проблем нет, то можно не париться, скорее всего.
F>Такой вставки, чтобы просто вставить — и он добавит куда надо — нет. F>А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять.
А толку быстро? При вставке всё равно придётся всё двигать.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
F>>Такой вставки, чтобы просто вставить — и он добавит куда надо — нет. F>>А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять. ·>А толку быстро? При вставке всё равно придётся всё двигать.
Я больше про то, что там все просто: ~idx и вот тебе готовый индекс куда вставить.
А придумывать про оптимизацию нет смысла без задачи задачи. Лично я глубоко подозреваю, что у ТС проблема быстродействия вообще не стоит. А если стоит, то надо смотреть условия. Нафантазировать можно разного, в т.ч. и где сортированный список+бинарный поиск будет весьма шустрым решением (если вставки почти всегда в конец списка, и извлечение тоже с конца). Но фантизировать без задачи смысла мало.
Здравствуйте, fmiracle, Вы писали:
F>>>Такой вставки, чтобы просто вставить — и он добавит куда надо — нет. F>>>А вот для поиска в отсортированном массиве есть метод BinarySearch — он тебе сразу и быстро даст индекс, куда вставлять. F>·>А толку быстро? При вставке всё равно придётся всё двигать. F>Я больше про то, что там все просто: ~idx и вот тебе готовый индекс куда вставить.
Нужно ещё убедиться, что возвращается нужный индекс при дупликатах. Доки ничего такого не говорят, значит докам может вернуться что попало. Т.е. если в списке [("A", 10), ("B", 10)] искать 10 то может вернуться любой индекс и иногда ВНЕЗАПНО результат может быть не такой как ожидается. Priority Queue работает как очередь, сохраняет порядок вставки.
Тупой перебор эл-тов списка будет не сильно сложнее, зато реализация будет работать детерминированно.
F>А придумывать про оптимизацию нет смысла без задачи задачи.
Это да.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай