1. 程式人生 > >Scala中foldLeft的簡單使用總結

Scala中foldLeft的簡單使用總結

Scala中foldLeft的簡單使用總結

由於工作需要,博主在寫spark相關業務程式碼時用到foldLeft,經過一番搜尋發現很多文章對這個函式的講解,於初學者來說不好理解,特此我來做個簡單易懂的分析總結,供大家參考。
若發現理解上的偏差,還請多指教。

原始碼分析

def seq: TraversableOnce[A]
scala.collection.TraversableOnce

上面兩段程式碼是scala.collection.TraversableOnce特質的foldLeft方法原始碼,實現了TraversableOnce trait的seq就是可迭代的集合;

    //將初始值z賦給result變數
    var result = z
    //遍歷seq集合,將result變數與seq集合取出的每個物件作為引數傳遞給op函式,每迭代一次op函式的返回值都賦給result變數
    this.seq foreach (x => result = op(result, x))  
    //最終獲取result作為返回值
    result

示例

    val lst = List(20,30,60,90)
    //0為初始值,b表示返回結果物件(迭代值),a表示lst集合中的每個值
    val rs = lst.foldLeft(0)((b,a)=>{
      b+a
    })

執行過程為:b=0+a,即0+20=20
b=20+a,即20+30=50
b=50+a,即50+60=110
b=110+a,即110+90=200
此處的a為迴圈取出集合中的值
最終結果: rs=200