gpt4 book ai didi

c# - 哪个 LINQ 表达式更好?

转载 作者:太空狗 更新时间:2023-10-30 00:27:12 25 4
gpt4 key购买 nike

我想知道以下哪个 LINQ 表达式更好(尤其是在性能方面)。

注意事项:

  • SearchKeywords的长度通常在50左右
  • 关键字的长度通常在 3 左右
  • 此方法被调用了大约 100,000 次

这个?

keywords.All(a => SearchKeywords.Contains(a));

或者这个

keywords.Except(SearchKeywords).None();

注意:.None() 是我的扩展方法,它只返回 !.Any()

有没有更好的写法?

问候

最佳答案

Except将快大约 gazillion 倍,因为它使用哈希表来查找集合差异¹,因此将提供 O(n) 性能。

Contains/All combo 必须对 SearchKeywords 进行简单的线性搜索²对于 keywords 中的每个元素,所以我们谈论的是 O(n²) 性能(实际上是 n * m ,但您提供的数字在同一范围内,并且我可以找任何借口输入指数)。

更新:如预期,it's not even close除非你明确创建一个 HashSet .


¹当然除非SearchKeywords 已经是 HashSet<string> ,正如 flq 在评论中非常正确地指出的那样。

²至少如果我们谈论一个IEnumerable ,它使用 LINQ to objects 标准实现。一个IQueryable理论上可以检测到这一点并以任何它喜欢的方式实现。

关于c# - 哪个 LINQ 表达式更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7513981/

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