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
}
}
輸出截圖:
相關用法
- Scala float.Abs用法及代碼示例
- Scala float.ToDouble用法及代碼示例
- Scala float.<用法及代碼示例
- Scala float.>用法及代碼示例
- Scala float.Max用法及代碼示例
- Scala float.<=用法及代碼示例
- Scala float.>=用法及代碼示例
- Scala float.Negate用法及代碼示例
- Scala float.+用法及代碼示例
- Scala float.*用法及代碼示例
- Scala float.-用法及代碼示例
- Scala float./用法及代碼示例
- Scala float.Min用法及代碼示例
- Scala float.ToLong用法及代碼示例
- Scala float.%用法及代碼示例
- Scala float.ToInt用法及代碼示例
- Scala BitSet DropRight()用法及代碼示例
- Scala BitSet DropWhile()用法及代碼示例
- Scala String lastIndexof()用法及代碼示例
- Scala String split()用法及代碼示例
- Scala String startsWith()用法及代碼示例
- Scala Float toInt()用法及代碼示例
- Scala TreeSet product()用法及代碼示例
- Scala Char getClass()用法及代碼示例
- Scala Char isDigit()用法及代碼示例
注:本文由純淨天空篩選整理自21211a4uyj大神的英文原創作品 Difference between foldLeft and reduceLeft in Scala。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。