请帮助我理解以下声明。我无法理解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)
答案 0 :(得分:2)
foldLeft
上的 List[A]
如下所示:
def foldLeft[B](z: B)(f: (B, A) => B): B
它接收类型为B
的种子,在您的情况下,它是列表l2
,它通常充当累加器,以及接收累加器和值的函数您要折叠的列表,并返回累加器的类型。
在你的例子中:
(a,b) => (b + a.head) :: a
a
是List[Double]
,b是l1
列表中的值。它使用l1
的值添加累加器的头部,并将其与累加器的a
连接。
我建议在fold函数中添加println
,以便您可以看到每次迭代中创建的值。