У меня есть класс Foo
, который содержит список объектов: List<Bar>
. Каждый Bar
имеет свойство, которое можно упорядочить по (тип TimeSpan
, представляющий продолжительность), а Bar
- неизменный объект, т.е. Длительность не изменяется по ходу алгоритма. В настоящий момент для каждого Foo
я также поддерживаю Bar
, который будет первым в списке, если он должен быть упорядочен (т.е. Bar
кратчайшей продолжительности). Что-то вроде этого:
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
используется в алгоритме, в котором производительность обработки (скорость) имеет решающее значение. Память важна, но не так сильно, как скорость. Существует список n Foo
s, каждый из которых имеет до m Bar
s. Этот класс довел меня до этого момента. Теперь я хочу предложить пользователю несколько вариантов, то есть мне нужно будет предоставить произвольный доступ к первым нескольким Bar
в списке.
Я хотел бы сохранить мой Bar
в порядке, чтобы я мог получить к ним доступ по порядку. В моем классе Bar
я реализовал IComparable
, чтобы позволить Bar
сравниваться по длительности, но я застреваю при выборе подходящего типа данных. Я посмотрел на System.Collections.SortedList
, но (если не ошибаюсь), это означает, что ссылки ссылаются на элементы по ключу, поскольку он реализует IDictionary
. Какую коллекцию я могу использовать, чтобы поддерживать мои объекты таким образом, чтобы они оставались отсортированными, и чтобы они проходили в порядке индекса?