当我使用Dictionary
向Add
添加条目时,会在其末尾添加KeyValuePair
。因此,当我在KeyValuePair
上进行迭代时,我想预先准备它,这是第一项。
有没有方法可以使用Dictionary
或者我应该构建List<KeyValuePair<TKey, TValue>>
还是你有更好的主张?
编辑:我以为我可以处理Dictionary
中的枚举,但似乎我不能。
我尝试了List<KeyValuePair<TKey, TValue>>
这不太实际。
答案 0 :(得分:12)
Dictionary
类中没有顺序概念 - Dictionary
没有位置索引。
如果需要在字典上使用位置索引,请查看System.Collections.Specialized
命名空间中的OrderedDictionary
类。
答案 1 :(得分:4)
我认为你正在寻找OrderedDictionary。
答案 2 :(得分:3)
使用OrderedDictionary
。
表示密钥或索引可访问的键/值对的集合。您可以将键值pait插入所需的索引。
答案 3 :(得分:3)
如果您希望保留订单,Dictionary
不是您要使用的集合(它没有订单概念)。
如果您需要索引字典,可以使用OrderedDictionary
集合。
还有一个SortedDictionary
集合,它会根据键值对您添加的值进行排序。
答案 4 :(得分:0)
正式地说,如果你遍历它(Dictionary<,>
,从而调用foreach
),你永远不会知道你的键值对将以GetEnumerator()
的顺序出现。当然,如果您Remove
字典中的某些项目以及之后的Add
其他项目,当您foreach
通过集合时,新项目将位于在迭代“list”的末尾删除了项目 not 。
但是:如果您从Delete
知道您永远不会Dictionary<,>
,则枚举似乎会按照添加顺序生成项目。不能保证这总是有效,但看起来它在当前的实现中是有效的。
所以如果你敢依靠这个,你可以说
foreach (var keyValuePair in myDict.Reverse())
{
...
Reverse
方法是LINQ的一部分(需要using System.Linq
)。