用foreach迭代字典,这样做的顺序是什么?

时间:2012-12-21 22:49:00

标签: c# .net collections dictionary

假设我有Dictionary,并按特定顺序添加每个keyvalue条目。
现在,如果我希望稍后能够以相同的顺序迭代这个Dictionary,那么添加条目是否是我在这个字典中使用简单foreach循环获得的顺序?

如果没有,我会很高兴听到我该怎么做,我知道这可以通过List而不是Dictionary轻松完成,但我不想这样做。

由于

4 个答案:

答案 0 :(得分:17)

正常Dictionary不保证商品的订单。

如果您想维护添加到其中的订单商品,则需要OrderedDictionary。请注意,.Net框架中没有此类的通用版本,因此要么必须放弃某些类型安全性,要么找到其他实现(即https://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IOsuggested 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