在Scala中理解foldLeft
请帮助我理解下面的陈述。我不明白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.
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
的种子,在您的例子中,它是listl2
,通常用作累加器,以及一个函数,该函数接收累加器和您要折叠的列表中的值,并返回累加器的类型
在您的示例中:
(a,b) => (b + a.head) :: a
a
是一个列表[Double]
,b是一个来自l1
列表的值。它将累加器的头部与l1
中的值相加,并将其与累加器的a
连接起来
我建议在fold函数中添加一个
println
,这样您就可以看到在每次迭代中创建的值。Awesome!我现在明白了。谢谢:)