代码之家  ›  专栏  ›  技术社区  ›  Jon Artus

用于扫描诸如ienumerable<bool>

  •  1
  • Jon Artus  · 技术社区  · 14 年前

    只是想知道,是否有任何一个林肯的大师能够阐明聚合和任何工作在引擎盖下。

    假设我有一个IEnumerable,它存储了测试给定条件的数组的结果。我想确定数组中的任何元素是否为假。有什么理由让我选择一个选项而不是另一个?

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

    在生产代码中,我倾向于使用1,因为它更明显,但出于好奇,我想知道在引擎盖下评估这些代码的方式是否存在差异。

    2 回复  |  直到 14 年前
        1
  •  8
  •   Jon Skeet    14 年前

    是的,绝对喜欢选项1——一旦发现任何错误的值,它就会停止。

    选项2将遍历整个数组。

    当然,还有可读性问题。)

        2
  •  3
  •   Benjamin Podszun    14 年前

    乔恩又打败了我,但要添加更多的文字:

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