当我将条目添加到Dictionary
usingAdd
时,将KeyValuePair
添加到它的末尾。我想预先添加它,因此当我迭代KeyValuePair
's 时,它是第一项。
有没有办法用一个Dictionary
或者我应该建立一个List<KeyValuePair<TKey, TValue>>
或者你有更好的提议?
编辑:我以为我可以在枚举中工作Dictionary
,看来我不能。
我试过了List<KeyValuePair<TKey, TValue>>
,不太实用。
当我将条目添加到Dictionary
usingAdd
时,将KeyValuePair
添加到它的末尾。我想预先添加它,因此当我迭代KeyValuePair
's 时,它是第一项。
有没有办法用一个Dictionary
或者我应该建立一个List<KeyValuePair<TKey, TValue>>
或者你有更好的提议?
编辑:我以为我可以在枚举中工作Dictionary
,看来我不能。
我试过了List<KeyValuePair<TKey, TValue>>
,不太实用。
该类Dictionary
中没有顺序的概念 - 没有位置索引Dictionary
。
如果您需要在字典上使用位置索引,请查看命名空间中的OrderedDictionary
类。System.Collections.Specialized
我认为您正在寻找OrderedDictionary。
使用OrderedDictionary
.
表示可由键或索引访问的键/值对的集合。您可以在所需的索引处插入键值 pait。
如果您希望保持顺序,Dictionary
则不是您要使用的集合(它没有顺序的概念)。
OrderedDictionary
如果您需要索引字典,有一个集合会有所帮助。
还有一个SortedDictionary
集合,它将根据键值对添加的值进行排序。
Dictionary<,>
正式地,如果您遍历它(foreach
它,从而调用GetEnumerator()
),您永远无法知道您的键值对将以什么顺序出现。当然,如果您Remove
的字典中有一些项目,然后是Add
其他一些项目,当您foreach
通过集合时,新项目将位于已删除项目的空间中,而不是在迭代“列表”的末尾。
但是:如果您从不知道您Delete
的Dictionary<,>
,看起来枚举会按照添加的顺序生成项目。不能保证这将始终有效,但看起来它在当前实现中有效。
所以如果你敢依赖这个,你可以说
foreach (var keyValuePair in myDict.Reverse())
{
...
该Reverse
方法是 LINQ 的一部分(需要using System.Linq
)。