System.Collections我的方案的最佳选择

时间:2011-01-02 01:56:45

标签: datetime collections fifo

我想要一个用于存储两种类型的集合:stringDateTime

string应该是我收藏的关键,而DateTime是它在收藏中的插入时间。我想以FIFO方式从集合中删除项目。

该集合应该拒绝重复的密钥,并且DateTime可以查询,所以如果现在想要的答案日期超过给定日期的项目数。

2 个答案:

答案 0 :(得分:3)

没有单一的内置C#数据类型以最高效率完成所有这些事情,主要是因为您指出了必须查找的两件事。

话虽这么说,Dictionary<string, DateTime>将是最简单的解决方案,它可以为您提供所需的所有功能,基本上是开箱即用的。但是,该集合将为DateTime查找提供O(n)复杂度,并且比O(1)删除时间更差。这可能不是什么大问题,但您没有描述您的性能要求,数据集的预期大小或最常发生的访问类型。

要改进“old-than-DateTime”查找性能和FIFO删除,您还可以保留第二个索引,例如SortedList。更多内存使用和总体插入时间稍慢,但DateTime和删除查询将更快。对于“早于DateTime”,您可以使用binary search of the SortedList.Keys

答案 1 :(得分:1)

听起来System.Collections.Generic.Dictionary<string, DateTime>应该做你的伎俩。它有根据需要处理集合的方法。