在Scala中理解foldLeft

在Scala中理解foldLeft,scala,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.

请帮助我理解下面的陈述。我不明白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)

List[A]
上的
foldLeft
如下所示:

def foldLeft[B](z: B)(f: (B, A) => B): B
它接收类型为
B
的种子,在您的例子中,它是list
l2
,通常用作累加器,以及一个函数,该函数接收累加器和您要折叠的列表中的值,并返回累加器的类型

在您的示例中:

(a,b) => (b + a.head) :: a
a
是一个
列表[Double]
,b是一个来自
l1
列表的值。它将累加器的头部与
l1
中的值相加,并将其与累加器的
a
连接起来


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

Awesome!我现在明白了。谢谢:)