У меня есть класс Foo
, который содержит список объектов: List<Bar>
. Каждый из Bar
имеет свойство, которое можно упорядочить (тип TimeSpan
, представляющий продолжительность), а Bar
- неизменный объект, то есть продолжительность не изменяется при работе алгоритма. На данный момент для каждого Foo
я также поддерживаю Bar
, который будет первым в списке, если он должен быть заказан (т. Е. Bar
кратчайшей продолжительности). Что-то вроде этого:Коллекция, которая поддерживает порядок сортировки C#
public class Foo
{
public List<Bar> AllBars { get; set; }
public Bar FirstBar { get; set; }
public Foo (Bar bar)
{
FirstBar = bar;
AllBars = new List<Bar>() { bar };
}
public AddBar(Bar bar)
{
if(bar.Duration < FirstBar.Duration)
{
FirstBar = bar;
}
AllBars.Add(bar);
}
}
Этот класс Foo
используется в алгоритме, где производительность обработки (скорость) имеет решающее значение. Память важна, но не так сильно, как скорость. Существует список nFoo
s, каждый из которых имеет до mBar
s. Этот класс довел меня до этого момента. Теперь я хочу предложить пользователю несколько вариантов, то есть мне нужно будет предоставить произвольный доступ к первым немногим Bar
s в списке.
Я хотел бы сохранить мои Bar
s для того, чтобы я мог получить к ним доступ по индексу по порядку. В моем Bar
классе I реализовано IComparable
, чтобы можно было сравнивать Bar
s, но я застреваю при выборе подходящего типа данных. Я посмотрел на System.Collections.SortedList
, но (если я не ошибаюсь) это похоже на ссылку элементов по ключу, поскольку оно реализует IDictionary
. Какую коллекцию я мог использовать, чтобы поддерживать мои объекты таким образом, чтобы они оставались отсортированными и чтобы они проходили по порядку индекса?
Не можете ли вы просто отсортировать регулярный 'Список' используя свой метод 'Sort'? Это потребует вызова после каждой вставки, но позволяет также подавлять сортировку, если вы знаете, что собираетесь добавить партию элементов. Вы можете украсить 'List ' своей собственной реализацией, которая выполняет сортировку для вас, так что извне вы все еще используете 'IList '. –
Попробуйте ['SortedSet'] (https://msdn.microsoft.com/en-us/library/dd412070.aspx), но обратите внимание, что он не позволяет дублировать. –
@AdamHouldsworth не думает, что это согласуется с «исполнением» –