是LINQ哪个扩展方法针对SortedDictionary进行了优化?

时间:2010-11-10 05:35:50

标签: .net linq sorteddictionary

民间,

如果我调用LINQ Where扩展方法,它是否利用SortedDictionary中的排序或者是否遍历每个KVP并进行比较?使用SortedDictionary进行按标准搜索方案是否有优势?

谢谢!

4 个答案:

答案 0 :(得分:4)

不,虽然LINQ方法尝试了一些基本的转换(即需要长度估计时的ICollection),但是它们无法开始将IEnumerable转换为每个.net集合,以查看它们是否可以使用该集合的属性

但是,如果您了解SortedDictionary源的属性,是否可以使用TakeWhile或SkipWhile而不是Where?

答案 1 :(得分:3)

据我所知,通过检查源代码(通过Reflector),不会对SortedDictionary<TKey, TValue>执行特殊处理。

答案 2 :(得分:0)

这完全取决于SortedDictionary的枚举器实现的行为。在那里使用Reflector来查看枚举器展示的行为。

答案 3 :(得分:0)

不,Linq查询会将集合枚举为KeyValuePair对象序列,并将谓词应用于每个对象。因此,在这种情况下,您将无法获得SortedDictionary提供的快速查找的好处。

但是,您应该意识到,实际上不可能使用字典的有效键查找(已排序或以其他方式)来执行此特定类型的查询,因为有效的键查找将解析为单个条目。这是因为数据结构中不允许使用重复键,因此对于可用于快速查找的给定键,您只能解析为单个结果值,而不是序列。

因此,这种情况并没有多大意义。