是否有一个IDictionary实现,可以按照添加顺序保存密钥? (未排序)

时间:2011-11-07 21:51:42

标签: .net collections dictionary

我想一切都在标题中......

我知道Dictionary<TKey,TValue>确实按顺序保留了密钥,但只要你不删除任何密钥,无论如何这种行为都没有记录,也不能依赖(见{{3详情)。

基本上,如果我想要一个有序的键/值对集合,同时保持O(1)访问时间,我应该使用什么集合? (List<KeyValuePair<K,V>>不是一个好选择,因为它有O(n)访问时间)。我不认为在BCL中有类似的东西,但我只是想确定在我自己推出之前......

只是为了让每个人都清楚:我不希望密钥排序,我只是希望它们保持按顺序排列。所以SortedList / SortedDictionary不是我想要的......

5 个答案:

答案 0 :(得分:2)

如果您可以接受非通用,那么System.Collections.Specialized.OrderedDictionary可以做您需要的。否则,我很想写一个包含列表和字典的包装器,使用GetEnumerator列表和索引器字典。

答案 1 :(得分:2)

您是否可以保留ListDictionary,以便查找列表中的键位置?这将允许您按添加顺序获取键/值对,但仍保持O(1)查找。

答案 2 :(得分:1)

因此,您不需要关联容器,订单完全基于广告订单...为什么不简单地使用基本数组?

答案 3 :(得分:1)

“添加顺序”通常不是Dictionary的问题,所以不要指望一个int是std库。

这当然是可能的,但总会以性能为代价。如果您发现O(1)查找很重要,我建议使用包含Dictionary<K,V>和耦合List<K>的包装器。添加和删​​除会变慢。

答案 4 :(得分:0)

您可以使用维护广告订单的SortedDictionary with a custom IComparer。当然,您是否想要将它包装在您自己更方便的界面中取决于您自己。