首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OrderedDictionary与字典

OrderedDictionary与字典
EN

Stack Overflow用户
提问于 2013-05-22 14:16:18
回答 1查看 69.1K关注 0票数 68

我正在寻找一种方法,让我的Dictionary按照添加的顺序枚举它的KeyValuePair。现在,字典文献明确指出:

出于枚举的目的,字典中的每个项都被视为表示值及其键的KeyValuePair<TKey, TValue>结构。返回项的顺序未定义。

我发现我需要的是一个OrderedDictionary,但作为一个怀疑论者,我决定自己尝试一下:

代码语言:javascript
复制
OrderedDictionary od = new OrderedDictionary();
Dictionary<String, String> d = new Dictionary<String, String>();

for (int i = 0; i < 10; i++)
{
    od.Add("key" + i, "value" + i);
    d.Add("key" + i, "value" + i);
}

System.Console.WriteLine("OrderedDictionary");
foreach (DictionaryEntry de in od) {
    System.Console.WriteLine(de.Key + ", " + de.Value);
}

System.Console.WriteLine("Dictionary");
foreach (var tmp in d) {
    System.Console.WriteLine(tmp.Key + ", " + tmp.Value);
}

输出:

代码语言:javascript
复制
OrderedDictionary
key0, value0
key1, value1
key2, value2
...

Dictionary
key0, value0
key1, value1
key2, value2
...

正如您所看到的,两者都是有序的,这就引出了两个问题:

在哪种情况下,Dictionary给出的顺序与添加值的顺序不同?我的第一个foreach循环是否保证以相同的顺序检索KeyValuePair,还是必须使用索引?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-22 14:23:54

你做错了。您不仅需要顺序地将值插入字典中,还需要删除一些元素,并查看在此之后顺序是如何更改的。下一段代码演示了以下内容:

代码语言:javascript
复制
OrderedDictionary od = new OrderedDictionary();
Dictionary<String, String> d = new Dictionary<String, String>();
Random r = new Random();

for (int i = 0; i < 10; i++)
{
    od.Add("key" + i, "value" + i);
    d.Add("key" + i, "value" + i);
    if (i % 3 == 0)
    {
        od.Remove("key" + r.Next(d.Count));
        d.Remove("key" + r.Next(d.Count));
    }
}

System.Console.WriteLine("OrderedDictionary");
foreach (DictionaryEntry de in od) {
    System.Console.WriteLine(de.Key + ", " +de.Value);
}

System.Console.WriteLine("Dictionary");
foreach (var tmp in d) {
    System.Console.WriteLine(tmp.Key + ", " + tmp.Value);
}

打印类似的内容(OrderedDictionary总是有序的):

代码语言:javascript
复制
OrderedDictionary
key3, value3
key5, value5
key6, value6
key7, value7
key8, value8
key9, value9
Dictionary
key7, value7
key4, value4
key3, value3
key5, value5
key6, value6
key8, value8
key9, value9
票数 78
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16694182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档