民间,
如果我调用LINQ Where扩展方法,它是否利用SortedDictionary中的排序或者是否遍历每个KVP并进行比较?使用SortedDictionary进行按标准搜索方案是否有优势?
谢谢!
答案 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提供的快速查找的好处。
但是,您应该意识到,实际上不可能使用字典的有效键查找(已排序或以其他方式)来执行此特定类型的查询,因为有效的键查找将解析为单个条目。这是因为数据结构中不允许使用重复键,因此对于可用于快速查找的给定键,您只能解析为单个结果值,而不是序列。
因此,这种情况并没有多大意义。