该站点上有几个问题指出字典没有保证的迭代顺序(这是哈希表的典型特征)。但是,我无法为 Dictionary 类证明这一点:
var dict = new Dictionary<string, int>();
var rand = new Random();
var randomList = Enumerable.Range(1, 1000)
.Select(i => new { x = rand.NextDouble().ToString(), i })
.ToArray();
foreach (var t in randomList) { dict[t.x] = t.i; }
Console.WriteLine(dict.Values.SequenceEqual(randomList.Select(t => t.i))); // prints True
这是 Dictionary 类的一些未记录的行为吗?或者我只是在我的例子中遗漏了一些东西?
编辑:奇怪的是,这种行为会维持一段时间,但最终会随着字典变大而停止。截止值似乎是 33899(仍然打印为 true,而 33900 打印为 false)。我想这可能与这个特定示例中的哈希冲突有关。