Используйте либо SortedDictionary, как указано в CodeInChaos, либо SortedList. Выберите, какой из них основан на разделе «Примечания» для каждого. Оба имеют выбор O (log n), поскольку они реализованы как двоичное дерево поиска (что, как я полагаю, так или иначе сбалансировано). Оба будут немного быстрее в конкретных обстоятельствах, описанных в их документации.
В принципе идея заключается в том, чтобы поддерживать две структуры данных:
Ваша коллекция предметов
отсортированный коллекция ссылок на пункты, упорядоченные по дате истечения срока действия.
Вам нужно какое-то обновление() цикл, который будет просто смотреть на первый индексе значения свойств вашего SortedList или SortedDictionary (O (1) операции) и посмотреть, если системная дата прошлого деталь срок годности.
Вот простое использование только с строками и Интсом:
using System;
using System.Collections.Generic;
using System.Text;
namespace TestDataStructures
{
class Program
{
static void Main(string[] args)
{
SortedList<int, string> dict = new SortedList<int, string>();
for (int i = 42; i < 100; i++) {
dict.Add(i, i.ToString());
}
for (int i = 41; i > 0; i--) {
dict.Add(i, i.ToString());
}
Console.Out.WriteLine("Smallest value is " + dict.Values[0]);
Console.ReadKey();
}
}
}
Всякий раз, когда вы добавляете новый элемент в вашу основную коллекцию, добавьте ссылку на него в этом SortedList/SortedDictionary и обеспечить срок годности как ключ к Сортировать по. Для хранения ссылок требуется немного больше накладных расходов памяти, но, как сказал CodeInChaos, это будет намного быстрее.Я не думаю, что это ужасно сложно закодировать.
Является ли приложение WinForms, WebForms или Service основано? – 2010-11-29 13:54:58
WinForms. Добавил его к вопросу. – fbernier 2010-11-29 14:25:09