Scala中foldLeft的簡單使用總結
阿新 • • 發佈:2018-11-24
Scala中foldLeft的簡單使用總結
由於工作需要,博主在寫spark相關業務程式碼時用到foldLeft,經過一番搜尋發現很多文章對這個函式的講解,於初學者來說不好理解,特此我來做個簡單易懂的分析總結,供大家參考。
若發現理解上的偏差,還請多指教。
原始碼分析
def seq: TraversableOnce[A]
上面兩段程式碼是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