有什么方法可以应用带有签名的函数
bool IsOdd(int number);
到整数数组并返回该数组中的任何给定整数在单个指令中是否为奇数?我知道我可以使用
return (array.Where(IsOdd).Count() > 0);
但这意味着调用两个方法并进行比较...真的没有更短的方法来实现相同的目标吗?
最佳答案
是的。
首先,您可以使用带有谓词的 Count
形式:
return array.Count(IsOdd) > 0;
...但您不想那样做。该代码仍在表达不必要的数值比较。您想询问数组中的任何项是否为奇数。换句话说:
return array.Any(IsOdd);
这不仅更具表现力 - 它也可能更快。一旦 Any
找到匹配项,它将返回 true
- 而 Count
将不得不遍历整个数组以准确找出有多少匹配项。
基本上,每当您看到使用 Count() > 0
的 LINQ 查询时,您应该考虑使用 Any
。在某些情况下,对于基于表达式树的查询,例如 LINQ to SQL,它可能不会产生性能差异(如果查询优化器可以看到与 0 的比较),但在 LINQ to Objects 中它肯定可以.
关于c# - Linq & boolean 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217044/