Список приоритетов C#
У меня проблемы с поиском правильной структуры данных C#. Я ищу PriorityList. Это должно иметь следующее:
- Только один предмет с данным приоритетом
- Должен оставаться отсортированным всегда
- Возможность добавить элемент в конец списка - prorityList.Add(item)
- Возможность вставки элемента с заданным приоритетом - priorityList.Add(3, item)
- Возможность доступа к любому элементу с помощью priority - priorityList[3]
- Возможность удалить элемент с заданным приоритетом - priorityList.RemoveAt(3)
- Когда элемент добавляется или удаляется, остальная часть списка должна соответственно сдвигаться вверх или вниз - например, если третий элемент удаляется, четвертый элемент становится третьим элементом, пятый элемент становится четвертым элементом и т. Д.
SortedList в C# выглядел многообещающе, но он не может обрабатывать вставку с уже существующим приоритетом или удаление элемента с заданным приоритетом (с соответствующим изменением списка в обоих случаях).
2 ответа
Решение
Если вы просто используете стандарт List<T>
это должно дать вам все, что вы просили, если вы используете priority == index.
Как насчет использования SortedDictionary<TKey, TValue>
где ключ является приоритетным? Он не совсем соответствует всем вашим требованиям, и неясно, хотите ли вы, чтобы приоритет был уникальным или нет. Если вы не хотите, чтобы приоритет был уникальным, LinkedList<T>
это, вероятно, ваш лучший выбор.