Sha*_*bie 17 .net c# collections
我知道字典不是有序集合,不应该依赖于字典中插入和检索的顺序.
但是,这是我注意到的:
检索顺序与添加顺序相同.测试了大约16个键值对.
这是设计的吗?
Jon*_*eet 28
虽然可以预见,但这只是巧合.你绝对不应该依赖它.通常它会在简单的情况下发生,但是如果你开始删除元素并用任何具有相同哈希码的东西替换它们或只是进入同一个桶,那么该元素将采用原始位置,尽管比其他元素更晚添加.
重现这一点是相对繁琐的,但我在不久前设法做了另一个问题:
using System;
using System.Collections.Generic;
class Test
{
static void Main(string[] args)
{
var dict = new Dictionary<int, int>();
dict.Add(0, 0);
dict.Add(1, 1);
dict.Add(2, 2);
dict.Remove(0);
dict.Add(10, 10);
foreach (var entry in dict)
{
Console.WriteLine(entry.Key);
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果显示10,1,2而不是1,2,10.
请注意,即使看起来当前行为总是会在插入顺序中产生元素,如果你不执行任何删除,也不能保证未来的实现会做同样的事情......所以即使在你知道你赢了的限制情况下也是如此不删除任何东西,请不要依赖于此.