У меня есть класс "manager", поддерживающий список объектов.Каждый объект имеет определенную «позицию», но им это неизвестно, об этом знает только менеджер.Менеджер должен назначить каждому объекту позицию и поддерживать свой список объектов, отсортированных в соответствии с этим «внешним атрибутом».
Обратите внимание, что позиция объекта может измениться в любое время.В идеале я должен иметь возможность немедленно получить элемент в позиции X или в позиции элемента X в любое время.
Это код C #.Мне интересно, что было бы чистым или идиоматическим способом сделать это.
Я думал о создании внутреннего класса, подобного этому:
class SortedElement {
public Element Elem { get; set; }
public int Position { get; set; }
}
И затем поддержу список SortedElements.Я не знаю, это кажется мне неуклюжим.Например, два отсортированных элемента могут иметь одинаковую позицию.Я чувствую, что есть очевидное, чистое решение, которое мне не хватает.Я также мог бы сделать Положение свойством самих Элементов, но это не имеет смысла семантически, то есть у них нет причин знать об этом, кроме как облегчить мою жизнь.
Пожалуйста, заставьте меня уйти facepalm .
РЕДАКТИРОВАТЬ: Следуя совету Эрика Липперта о перечислении моих требований и хорошего сна, я понял, что должен выбрать LinkedList<Element>
и использовать индекс в качестве позиции.В самом деле, наиболее распространенными операциями здесь будут вставка в начале и удаление в любом месте контейнера, которые дороги для контейнера на основе массива.Спасибо за все ответы.