我刚开始学习Scala,所以请耐心:-)

我对reduceLeft的行为有疑问。这里是一个例子:

List(1, 2, 3, 4, 5) reduceLeft (_ + _)

我想知道是否可以同时进行计算,例如:

第一回合:
  • 进程1计算:1 + 2
  • 进程2计算:4 + 5

  • 第二轮:
  • 进程1计算:3 + 3

  • 第三轮:
  • 进程1计算:6 + 9

  • 如果我只使用reduce函数而不是reduceLeft,那至少是我期望的。还是reduceLeft真的只一次减少一个?
    ((((1 + 2) + 3) + 4) + 5)
    

    这基本上意味着它不能并行执行,如果可能的话,应该始终首选reduce而不是reduceLeft/Right?

    最佳答案

    答案是肯定的,而且非常简单:

    List(1, 2, 3, 4, 5).par.reduce (_ + _)
    
    par方法将列表转换为并行集合。当您在此并行集合上调用reduce时,它将并行执行。

    参见the parallel collection documentation

    关于scala - 可以并行执行reduceLeft吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15282884/

    10-11 10:25