只是想知道是否有任何LINQ专家可以揭示聚合和任何工作的方式。
想象一下,我有一个IEnumerable,它存储了针对给定条件测试数组的结果。我想确定数组的任何元素是否为false。有什么理由我更喜欢一种选择吗?
IEnumerable<bool> results = PerformTests();
return results.Any(r => !r); //Option 1
return results.Aggregate((h, t) => h && t); //Option 2
在生产代码中,我倾向于1,因为它更加明显,但出于好奇,我们想知道这些内容的评估方式是否存在差异。
答案 0 :(得分:8)
是的,肯定更喜欢选项1 - 一旦找到任何错误的值,它就会停止。
选项2将遍历整个数组。
然后还有可读性问题,当然:)
答案 1 :(得分:3)
Jon再次击败了我,但又添加了一些文字:
聚合总是需要消耗整个IEnumerable<T>
,因为这正是它应该做的:从(完整)源生成数据集。
这是众所周知的Map / Reduce场景中的“Reduce”。