为什么字典是“无序的”?

我已经阅读了这篇文章,以回答这里的许多问题。但这到底是什么意思?

var test = new Dictionary<int, string>();

test.Add(0, "zero");

test.Add(1, "one");

test.Add(2, "two");

test.Add(3, "three");

Assert(test.ElementAt(2).Value == "two");

上面的代码似乎按预期工作。那么字典以什么方式被认为是无序的呢?以上代码在什么情况下可能会失败?

回答:

好吧,一方面,您不清楚这是 插入顺序 还是 键顺序 。例如,如果您编写以下内容,您期望的结果是什么:

var test = new Dictionary<int, string>();

test.Add(3, "three");

test.Add(2, "two");

test.Add(1, "one");

test.Add(0, "zero");

Console.WriteLine(test.ElementAt(0).Value);

您期望“三”还是“零”?

碰巧的是,只要您从不删除任何内容,我 认为 当前的实现会保留插入顺序-但您 一定不能依赖于此 。这是一个实施细节,将来可能会改变。

删除也会影响这一点。例如,您希望该程序的结果是什么?

using System;

using System.Collections.Generic;

class Test

{

static void Main()

{

var test = new Dictionary<int, string>();

test.Add(3, "three");

test.Add(2, "two");

test.Add(1, "one");

test.Add(0, "zero");

test.Remove(2);

test.Add(5, "five");

foreach (var pair in test)

{

Console.WriteLine(pair.Key);

}

}

}

实际上(在我的盒子上)是3、5、1、0。5的新条目使用了2以前使用的腾空条目。不过,也不能保证。

重新哈希(当需要扩展字典的基础存储时)可能会影响事物……各种各样的事情都会发生。

以上是 为什么字典是“无序的”? 的全部内容, 来源链接: utcz.com/qa/427692.html

回到顶部