SortedDictionary的初始化而不进行比较

时间:2015-11-28 12:39:29

标签: c# dictionary

在我的申请中,我有SortedDictionary。大多数时候,我在其中插入单个值 - 在这种情况下,据我所知,它需要使用Compare方法来确定新值应该添加到何处。 我只是想知道,是否有一些方法我可以从一个KeyValuePair<>[]数组初始化这个SortedDictionary,而不会导致Compare方法运行。

问题是,有时候我确实有一个KeyValuePair<>[]数组,它包含已排序的键,所以它可以在SortedDictionary中转换而无需任何额外的排序。我知道编译器不知道我的集合是如何排序的,但是因为我确定它,是否有某种方法可以逃避比较?如果这个请求完全是废话,你能解释一下原因吗?

我想要的唯一原因是因为性能 - 在使用大型集合时,Compare方法需要一些时间才能完成。

1 个答案:

答案 0 :(得分:1)

  

[...]据我所知编译器不知道我的收藏是   排序,[...]

排序不是编译时,而是运行时细节。

我认为这不是一个好主意。以下是不这样做的理由的总结

  • 字典实际上是哈希表。因此,密钥未按本身进行排序。
  • 排序字典要求比较器以任意顺序提供密钥。如果您不使用比较器,那么简单的哈希表如何能够以某种顺序公开其键?

在一天结束时,当您需要一个订单插入订单的集合时,您应该使用List<T>,在您的情况下,您应该考虑{ {1}}。无论如何,这对你的情况不起作用。您希望提供已排序的序列作为已排序字典的来源,并且在构造时间之后添加新对时,让比较器在字典填充后工作。

我想说如果你需要一个排序的字典,它依赖于在构造时间给出的一对配对而且不能重新排序(因为它们已经被排序),那么你需要思考关于滚动你自己的List<KeyValuePair<TKey, TValue>>实现来提供这样的功能......

相关问题