2017-07-07 25 views
-4

請幫我理解下面的說法。我無法理解foldLeft如何在這裏工作:瞭解Scala中的foldLeft

scala> l1 
res71: List[Double] = List(1.0, 1.0, 1.0) 

scala> l2 
res72: List[Double] = List(1.5, 0.0) 

scala> l1.foldLeft(l2) { (a,b) => (b + a.head) :: a} 
res73: List[Double] = List(4.5, 3.5, 2.5, 1.5, 0.0) 

回答

2

foldLeftList[A]看起來是這樣的:

def foldLeft[B](z: B)(f: (B, A) => B): B 

它發生在B類型的種子,在你的情況下,它的列表l2,通常充當累加器,以及接收累加器和來自您正在摺疊的列表中的值的函數,並返回累加器的類型。

在您的例子:

(a,b) => (b + a.head) :: a 

aList[Double],b是從l1列表中的值。它將累加器的頭部與來自l1的值相加,並將其與累加器的a連接。

我建議在摺疊函數中添加一個println,這樣您就可以看到在每次迭代中創建的值。

+1

太棒了!我現在明白了。謝謝 :) – Sudha