2

当我将条目添加到DictionaryusingAdd时,将KeyValuePair添加到它的末尾。我想预先添加它,因此当我迭代KeyValuePair's 时,它是第一项。

有没有办法用一个Dictionary或者我应该建立一个List<KeyValuePair<TKey, TValue>>或者你有更好的提议?

编辑:我以为我可以在枚举中工作Dictionary,看来我不能。

我试过了List<KeyValuePair<TKey, TValue>>,不太实用。

4

5 回答 5

12

该类Dictionary中没有顺序的概念 - 没有位置索引Dictionary

如果您需要在字典上使用位置索引,请查看命名空间中的OrderedDictionary类。System.Collections.Specialized

于 2012-05-25T13:02:45.943 回答
4

我认为您正在寻找OrderedDictionary

于 2012-05-25T13:02:55.537 回答
3

使用OrderedDictionary.

表示可由键或索引访问的键/值对的集合。您可以在所需的索引处插入键值 pait。

于 2012-05-25T13:04:47.267 回答
3

如果您希望保持顺序,Dictionary则不是您要使用的集合(它没有顺序的概念)。

OrderedDictionary如果您需要索引字典,有一个集合会有所帮助。

还有一个SortedDictionary集合,它将根据键值对添加的值进行排序。

于 2012-05-25T13:05:17.487 回答
0

Dictionary<,>正式地,如果您遍历它(foreach它,从而调用GetEnumerator()),您永远无法知道您的键值对将以什么顺序出现。当然,如果您Remove的字典中有一些项目,然后是Add其他一些项目,当您foreach通过集合时,新项目将位于已删除项目的空间中,而不是在迭代“列表”的末尾。

但是:如果您从不知道您DeleteDictionary<,>,看起来枚举会按照添加的顺序生成项目。不能保证这将始终有效,但看起来它在当前实现中有效。

所以如果你敢依赖这个,你可以说

foreach (var keyValuePair in myDict.Reverse())
{
  ...

Reverse方法是 LINQ 的一部分(需要using System.Linq)。

于 2012-05-25T13:54:11.767 回答