System.Collections лучший выбор для моего сценария - PullRequest
2 голосов
/ 02 января 2011

Я хочу коллекцию для хранения двух типов: string и DateTime.

string должен быть ключом моей коллекции, а DateTime - это время его вставки в коллекцию. Я хочу удалить предметы из коллекции FIFO образом.

Коллекция должна отклонять дубликаты ключей и запрашивать их по DateTime, поэтому, если вы хотите узнать количество элементов старше указанной даты, она может ответить.

Ответы [ 2 ]

3 голосов
/ 02 января 2011

Не существует единственного встроенного типа данных C #, который бы делал все эти вещи с максимальной эффективностью, в основном, так как вы указали две вещи, по которым вам нужно будет искать.

При этом Dictionary<string, DateTime> будет простейшим решением , которое предоставит вам все необходимые функции, в основном из коробки.Однако эта коллекция создаст сложность O (n) для поиска DateTime и время удаления хуже, чем O (1).Это, вероятно, не имеет большого значения, но вы не описали свои требования к производительности, ожидаемые размеры вашего набора данных или какие типы доступа происходят чаще всего.производительность поиска и удаление FIFO, вы также можете сохранить второй индекс, такой как SortedList.Более интенсивное использование памяти и несколько меньшее общее время вставки, но DateTime и запросы на удаление будут выполняться быстрее.Для «старше чем DateTime» вы можете использовать двоичный поиск для SortedList.Keys .

1 голос
/ 02 января 2011

Звучит так, как будто System.Collections.Generic.Dictionary<string, DateTime> должно сработать.У него есть методы для обработки коллекции, как вам нужно.

...