假设我有Dictionary
,并按特定顺序添加每个key
和value
条目。
现在,如果我希望稍后能够以相同的顺序迭代这个Dictionary
,那么添加条目是否是我在这个字典中使用简单foreach
循环获得的顺序?
如果没有,我会很高兴听到我该怎么做,我知道这可以通过List
而不是Dictionary
轻松完成,但我不想这样做。
由于
答案 0 :(得分:17)
正常Dictionary
不保证商品的订单。
如果您想维护添加到其中的订单商品,则需要OrderedDictionary
。请注意,.Net框架中没有此类的通用版本,因此要么必须放弃某些类型安全性,要么找到其他实现(即https://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IO为suggested by Tim S)。
或者,如果O(log n)查找正常并且键应该排序 - SortedDictionary。
答案 1 :(得分:4)
您想要的是Queue<T>
:http://msdn.microsoft.com/en-us/library/7977ey2c.aspx
按照您想要的顺序将KeyValuePair<T, U>
项添加到其中,然后foreach
将按先进/先出的顺序添加。
答案 2 :(得分:3)
Dictionary
是哈希表,这意味着您无法保证迭代对将按照您添加它们的顺序返回它们。
每一对都是KeyValuePair<T_K, T_V>
,因此您可以拥有一个List<KeyValuePair<string, string>>
,让您按照添加顺序进行迭代,如果这是您需要的。
答案 3 :(得分:2)
字典的内部排序取决于使用的散列函数。但是,如果您需要数据的排序视图,则可以使用Enumerable.OrderBy
。