当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala foldLeft和reduceLeft的区别用法及代码示例


1.Scala中foldLeft和reduceLeft的区别

高阶 Scala 方法foldLeft 和reduceLeft 都用于聚合集合的项目。但他们表现出不同的行为:

向左折叠:

  • FoldLeft 接受一个集合并使用二元运算符从给定的初始值 (z) 开始合并其成员。
  • 当它在集合中从左向右移动时,它将二元运算符应用于每个成员和总结果(最初是 z)。
  • 所有项目处理完后获得的总值就是结果。
  • FoldLeft 产生与原始类型相同的值 (z)。

向左减少:

  • FoldLeft 的一个变体称为“reduceLeft”,它使用起始值作为集合的第一个成员。
  • 从集合中的第一个成员开始,它使用二元运算符来组合所有项目。
  • 它从左到右在集合中移动,就像 FoldLeft 一样,将二元运算符应用于每个元素和总结果。
  • 所有项目处理完后获得的总值就是结果。
  • reduceLeft 返回的类型与集合元素的类型相同。

总之,foldLeft和reduceLeft都对集合进行left-associative折叠;然而,foldLeft 允许指定起始值(z),而reduceLeft 将初始值设置为集合的第一个成员。

2. 代码及截图

这是一个示例,展示了如何使用foldLeft和reduceLeft:

object Main {
  def main(args: Array[String]): Unit = {
    val numbers = List(1, 2, 3, 4, 5)

    // Using foldLeft to calculate the sum
    val sumFold = numbers.foldLeft(0)((acc, num) => acc + num)
    println("Sum using foldLeft: " + sumFold) // Output: 15

    // Using reduceLeft to calculate the sum
    val sumReduce = numbers.reduceLeft((acc, num) => acc + num)
    println("Sum using reduceLeft: " + sumReduce) // Output: 15
  }
}

输出截图:


Screenshot-(367)


相关用法


注:本文由纯净天空筛选整理自21211a4uyj大神的英文原创作品 Difference between foldLeft and reduceLeft in Scala。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。