聚合与任意,用于扫描IEnumerable <bool> </bool>等对象

时间:2010-03-05 10:16:32

标签: c# linq

只是想知道是否有任何LINQ专家可以揭示聚合和任何工作的方式。

想象一下,我有一个IEnumerable,它存储了针对给定条件测试数组的结果。我想确定数组的任何元素是否为false。有什么理由我更喜欢一种选择吗?

IEnumerable<bool> results = PerformTests();

return results.Any(r => !r); //Option 1
return results.Aggregate((h, t) => h && t); //Option 2

在生产代码中,我倾向于1,因为它更加明显,但出于好奇,我们想知道这些内容的评估方式是否存在差异。

2 个答案:

答案 0 :(得分:8)

是的,肯定更喜欢选项1 - 一旦找到任何错误的值,它就会停止。

选项2将遍历整个数组。

然后还有可读性问题,当然:)

答案 1 :(得分:3)

Jon再次击败了我,但又添加了一些文字:

聚合总是需要消耗整个IEnumerable<T>,因为这正是它应该做的:从(完整)源生成数据集。 这是众所周知的Map / Reduce场景中的“Reduce”。