c#命令保留数据结构

奇怪的是,MSDN没有关于数据结构的保持属性的信息。 所以我一直在假设:

  • Hashtable和Hashset不保留插入顺序(也就是“散列”中有赠品)
  • 字典和列表DO保留插入顺序。

从这里我推断,如果我有一个定义曲线的Dictionary foo ,foo.Keys.ToList()和foo.Values.ToList()将给我一个有关的曲线范围和域的列表没有弄乱它吗?

您不应期望常规Dictionary的键或值可以按任何顺序维护。 在SortedDictionary ,键和值按键的值按顺序维护 – 这与插入顺序不同

.NET框架中唯一保留插入顺序的内置字典是System.Collections.Specialized.OrderedDictionary 。 不幸的是,这个类不是通用的 – 但是,围绕它编写通用包装并不是非常困难。 请记住,在处理值类型(如intdouble )时,它将导致键/值的装箱(通用词典不会对值类型施加装箱)。

正如@Anton所指出的那样, Dictionary是一个无序的集合。 正确返回你的价值观是巧合,最终会失败。 如果您需要有一个有序的哈希表,您应该使用SortedDictionary

无论如何,依靠Dictionary来保持秩序!

虽然Dictionary明确指出枚举排序未定义,但我们测试它确实保留了插入排序(至少只要你不从中删除项目)。 如果有人可以提供反驳它的测试,我们会非常感兴趣,因为我们的生产代码依赖于它。

您可以采用相同的方法,为自己节省一些精力,为客户节省一些钱。

当然,Microsoft可能会在未来的.NET版本中更改Dictionary实现,但如果发生这种情况,您的自动化测试会检测到它,并且您可以在那时用另一个容器替换Dictionary,对吧?