2017-07-07 41 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