當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。