15

假设我有一个,然后按特定顺序Dictionary添加每个key和条目。 现在,如果我希望以后能够以添加条目的相同顺序对其进行迭代,这是我在这本字典上使用简单循环获得的顺序吗? value
Dictionaryforeach

如果没有,我会很高兴听到我该怎么做,我知道这可以很容易地完成ListDictionary但我不想这样做。

谢谢

4

4 回答 4

19

Normal Dictionary does not guarantee order of items.

You need OrderedDictionary if you want to maintain order items where added to it. Note that there is no generic version of this class in .Net framework, so either have to give up some type-safety or find other implementation (i.e. https://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IO as suggested by Tim S).

Alternatively if O(log n) lookup is fine and keys should be sorted - SortedDictionary.

于 2012-12-21T22:58:39.260 回答
4

听起来你想要的是:http Queue<T>: //msdn.microsoft.com/en-us/library/7977ey2c.aspx

KeyValuePair<T, U>按照您想要的顺序将您的项目添加到其中,然后foreach按先进/先出顺序将其添加。

于 2012-12-21T23:08:11.387 回答
3

Dictionarys 是哈希表,这意味着您不能保证迭代这些对将按照添加它们的相同顺序返回它们。

每对都是 a KeyValuePair<T_K, T_V>,因此您可以拥有 a List<KeyValuePair<string, string>>,如果这是您需要的话,您可以按照添加它们的顺序进行迭代。

于 2012-12-21T22:52:59.297 回答
2

字典的内部排序将取决于使用的散列函数。但是,如果您需要数据的排序视图,您可以使用Enumerable.OrderBy.

于 2012-12-21T22:53:41.233 回答