LINQ的任何方法是否有效?
Any
方法将只迭代必要的最小元素数。只要它找到一个匹配的元素,它将立即返回
这是大致实现如下
public static bool Any<T>(this IEnumerable<T> enumerable, Func<T, bool> predicate) {
foreach (var cur in enumerable) {
if (predicate(cur)) {
return true;
}
}
return false;
}
在最坏的情况下(没有或最后一个匹配)将访问所有元素。在最好的情况下(第一次匹配),它将只访问1
后者 - 你可以用ReSharper看代码来验证,如果你下载试用版。
至于Any是否有效率 - 这不是例如, Count属性可用作替代。但它确实可以很好地表达意图。
如果IEnumerable
这是真的,但我正在处理尚未实现的序列。实际上,我正在编写一个通用库来补充'Enumerable'。所以我不知道给定的序列是什么,只是它实现了'IEnumerable
如果您正在处理尚未实现的序列,请务必确保它们是否可重复。由于'Any'必须读取序列的一个元素才能完成它的工作,所以在将其应用于不可重复序列时必须小心,否则将失去第一个元素。我一直在看这一段时间,实际上它有助于:http://stackoverflow.com/questions/9194908/safely-checking-non-repeatable-ienumerables-for-emptiness – 2012-03-14 18:08:11
只要它找到与谓词的成功匹配,任何就立即返回true,但如果不存在,它将遍历整个集合。
我希望是这样,谢谢。我最初使用'Count()> 0',并意识到这是一个非常昂贵的操作。我重新发现了'Any'并且一直在其他地方使用它。:) – Jordan 2012-03-14 16:28:10