我ILookup<TKey,TElement> lookup经常从中获取元素并使用LINQ或者迭代它们foreach.我看起来像这样IEnumerable<TElement> results = lookup[key];.
因此,results每次使用查找结果时都需要至少枚举一次(如果我先不使用.ToList(),那么如果我多次迭代则更多).
即使它不是"干净",使用a也不是更好(性能方面)Dictionary<TKey,List<TElement>>,所以一个键的所有结果只在字典的构造中枚举?ToList()有多累赘?
Jon*_*eet 15
ToLookup和所有其他ToXXXLINQ方法一样,它使用立即执行.生成的对象没有引用原始源.它有效地不建一个Dictionary<TKey, List<TElement>>-而不是那些确切的类型,也许,但等同于它.
请注意,虽然存在差异,但可能对您有用或可能没有用 - 如果您为其提供不存在的密钥而不是抛出异常,则查找的索引器将返回空序列.如果您希望能够通过任何键对其进行索引并迭代相应的值,那么这可以使生活变得更加容易.
另请注意,虽然没有明确记录,但是用于值序列的实现确实实现了ICollection<T>,因此调用LINQ Count()方法是O(1) - 它不需要迭代所有元素.
有关详细信息,请参阅我的Edulinq帖子ToLookup.
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |