gpt4 book ai didi

c# - 枚举 ILookup 结果的成本?总是使用 Dictionary> 更好?

转载 作者:太空狗 更新时间:2023-10-29 20:50:28 26 4
gpt4 key购买 nike

我有一个 ILookup<TKey,TElement> lookup我经常从中获取元素并使用 LINQ 或 foreach 遍历它们.我这样查IEnumerable<TElement> results = lookup[key]; .

因此,results每次我使用查找结果时都需要至少枚举一次(如果我不首先使用 .ToList() 进行多次迭代,则需要枚举更多次)。

即使它不那么“干净”,使用 Dictionary<TKey,List<TElement>> 不是更好(性能方面)吗? ,以便仅在构建字典时枚举来自键的所有结果? ToList() 到底有多费力?

最佳答案

ToLookup ,像所有其他的一样ToXXX LINQ 方法,使用立即执行。结果对象没有对原始源的引用。它有效地确实构建了一个Dictionary<TKey, List<TElement>> - 可能不是那些确切的类型,但等同于它。

请注意,这里有一个区别,它可能对您有用,也可能对您没有用 - 如果您给查找的索引器提供一个不存在的键,它会返回一个空序列,而不是抛出异常。如果您希望能够通过任何键对其进行索引并迭代相应的值,那么这会让生活变得更加轻松。

另请注意,虽然没有明确记录,但用于值序列的实现确实实现了ICollection<T> , 所以调用 LINQ Count()方法是 O(1) - 它不需要遍历所有元素。

查看我的 Edulinq post on ToLookup 了解更多详情。

关于c# - 枚举 ILookup 结果的成本?总是使用 Dictionary<TKey,List<TElement>> 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12389138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com