关于c#:为什么.Net字典看起来像是排序的?

Why does the .Net Dictionary look like it is sorted?

本问题已经有最佳答案,请猛点这里访问。

我在看我的同事签入的代码,它看起来是这样的:

1
return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);

我立即告诉我的同事他的代码是错误的,因为Dictionary是一个哈希表,一个未排序的集合。我说,他要么使用保存订单的收藏品,要么在以后用foreach从字典中读到的时候对这些物品进行分类。

但他回答说:"不,不,我的密码是正确的!看:既然我已经添加了OrderBy,那么这些项目的显示顺序是正确的。"

结果,在测试案例中,他是对的。我尝试了一些其他的数据,但它仍然是完美的排序!

我告诉他不应该依赖这种行为,但他不同意,我很难解释为什么。另外,我很感兴趣的是,为什么订单经常被保存。

所以我的问题是…为什么作为一个基本上没有排序的集合,Dictionary看起来像是排序的?


由于实现Dictionary的方式(在您的案例中,项目是按顺序添加的),所以对它进行排序。但这是实现细节。

告诉你的同事有一个SortedDictionary类存在,这应该能让他相信我们不能依赖简单的Dictionary;的项目订单。


当遍历字典时,您将按照插入字典的顺序获取其中的项。

在这个例子中,一个列表被排序,然后每个条目依次添加到字典中。

最终的结果是字典中的项按列表的排序顺序排列。

然而,这种情况恰好发生在当前执行Dictionary的情况下——不能保证它会保持这种状态。

如果您需要在一个特定的顺序中拥有一个Dictionary中的项目,您应该使用一个SortedDictionary