【发布时间】:2012-04-07 01:20:42
【问题描述】:
我正在查看我的同事签入的一些代码,它看起来像这样:
return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);
我立即告诉我的同事他的代码是错误的,因为Dictionary 是一个哈希表,一个未排序的集合。我说,他应该使用保持顺序的集合,或者稍后在他使用foreach 从字典中读取项目时对项目进行排序。
但他回答“不,不,我的代码是正确的!看:现在我已经添加了OrderBy,项目以正确的顺序显示。”
事实证明,在测试用例上,他是对的。我尝试了一些其他数据,但它仍然是完美排序的!
我告诉他他不应该依赖这种行为,但他不同意,我无法解释原因。此外,我对为什么订单似乎经常被保留很感兴趣。
所以我的问题是......为什么Dictionary,一个根本上未排序的集合,看起来很像它是排序的?
【问题讨论】:
-
Dictionary 不保证集合是无序的。它不会故意使用 Random。是的,代码错了。
-
是的,贾斯汀,这是重复的。您链接的问题的答案是我想要的。你怎么能在这么多关于字典的问题中这么快找到重复的?我搜索并找不到它。谢谢!
-
我不知道(这就是我将其作为评论发布的原因)但我想这与 SQL 中的相同:
SELECT返回的行以未指定的顺序返回,除非包括ORDER BY子句。通常,特别是在小型数据集中,行以它们插入的相同顺序返回,这让很多人感到困惑。 (我总是告诉人们,如果他们完全关心结果的顺序,请添加ORDER BY。没有它它可能工作,但它也可能会严重损坏。) -
@EldritchConundrum -- 这是
.net dictionary order在 Google 上的第一个结果。我发现 Google 有时比内置搜索效果更好。
标签: c# .net sorting dictionary hashtable