了解Scala中的foldLeft

时间:2017-07-07 19:11:15

标签: 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)

1 个答案:

答案 0 :(得分:2)

foldLeft上的

List[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连接。

我建议在fold函数中添加println,以便您可以看到每次迭代中创建的值。