Scala - Scanleft,在迭代中返回值而不在下一轮使用它

Scala - Scanleft, returning values within iterations without using it in a next turn

我有一个列表

我想做的是

def someRandomMethod(...): ... = {
  val list = List(1, 2, 3, 4, 5)
  if(list.isEmpty) return list
  list.differentScanLeft(list.head)((a, b) => {
     a * b
  })
}

哪个returns List(1, 2, 6, 12, 20) 而不是 List(1, 2, 6, 24, 120)

有这样的API吗?

谢谢, 宇宙

您可能想使用 zip

val list = List(1,2,3,4,5,6)
val result = list.zip(list.drop(1)).map{case (a,b) => a*b}
println(result)

> List(2, 6, 12, 20, 30)

scan 并不是真正正确的方法,您想使用 sliding 生成相邻值对的列表:

(1::list).sliding(2).map(l => l(0)*l(1))

更一般地说,有时需要在使用 scan 时将数据传递给下一次迭代。对此的标准解决方案是使用一个元组 (state, ans) 然后在最后用另一个 map 过滤掉状态。