我想一切都在标题中......
我知道Dictionary<TKey,TValue>
确实按顺序保留了密钥,但只要你不删除任何密钥,无论如何这种行为都没有记录,也不能依赖(见{{3详情)。
基本上,如果我想要一个有序的键/值对集合,同时保持O(1)访问时间,我应该使用什么集合? (List<KeyValuePair<K,V>>
不是一个好选择,因为它有O(n)访问时间)。我不认为在BCL中有类似的东西,但我只是想确定在我自己推出之前......
只是为了让每个人都清楚:我不希望密钥排序,我只是希望它们保持按顺序排列。所以SortedList
/ SortedDictionary
不是我想要的......
答案 0 :(得分:2)
如果您可以接受非通用,那么System.Collections.Specialized.OrderedDictionary
可以做您需要的。否则,我很想写一个包含列表和字典的包装器,使用GetEnumerator
列表和索引器字典。
答案 1 :(得分:2)
您是否可以保留List
和Dictionary
,以便查找列表中的键位置?这将允许您按添加顺序获取键/值对,但仍保持O(1)
查找。
答案 2 :(得分:1)
因此,您不需要关联容器,订单完全基于广告订单...为什么不简单地使用基本数组?
答案 3 :(得分:1)
“添加顺序”通常不是Dictionary的问题,所以不要指望一个int是std库。
这当然是可能的,但总会以性能为代价。如果您发现O(1)查找很重要,我建议使用包含Dictionary<K,V>
和耦合List<K>
的包装器。添加和删除会变慢。
答案 4 :(得分:0)
您可以使用维护广告订单的SortedDictionary
with a custom IComparer
。当然,您是否想要将它包装在您自己更方便的界面中取决于您自己。