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
过滤掉状态。
我有一个列表
我想做的是
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
过滤掉状态。