Dea*_*sus 52 c# dictionary ordereddictionary
我正在寻找一种方法来按照添加它们的顺序Dictionary枚举它KeyValuePair.现在,Dictionary的文档明确指出:
出于枚举的目的,字典中的每个项目都被视为
KeyValuePair<TKey, TValue>表示值及其键的结构.返回项的顺序未定义.
我发现我需要的是一个OrderedDictionary,但我是怀疑论者,我决定亲自尝试:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,两者都是有序的,并提出了两个问题:
在哪种情况下,Dictionary给出与添加值的顺序不同的顺序?我的第一个foreach循环是否确保我以KeyValuePair相同的顺序检索我,或者我是否必须使用索引?
Ily*_*nov 62
你做错了.您不仅需要按顺序将值插入到字典中,还需要删除一些元素,并在此之后查看订单的更改方式.下一代码演示了这个:
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);
}
Run Code Online (Sandbox Code Playgroud)
打印类似的东西(OrderedDictionary总是有序):
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
Run Code Online (Sandbox Code Playgroud)