У меня есть класс 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. Какую коллекцию я могу использовать, чтобы поддерживать мои объекты таким образом, чтобы они оставались отсортированными, и чтобы они проходили в порядке индекса?