如何将第n和第(n + 1)个元素折叠到Scala中的新列表中?

sve*_*hie 2 scala list fold

假设我有List(1,2,3,4,5),我想获得List(3,5,7,9),即元素和前一个的总和(1 + 2,2 +) 3,3 + 4,4 + 5)

我尝试通过制作两个列表来做到这一点:

val list1 = List(1,2,3,4)
val list2 = (list1.tail ::: List(0))                   // 2,3,4,5,0
for (n0_ <- list1; n1th_ <- list2) yield (n0_ + n1_)
Run Code Online (Sandbox Code Playgroud)

但是它将所有元素彼此组合在一起,就像交叉产品一样,我只想成对地组合元素.我是函数式编程的新手,我以为我会使用map()但似乎无法这样做.

Inf*_*ity 12

List(1, 2, 3, 4, 5).sliding(2).map(_.sum).to[List] 做的工作.

文档:

def sliding(size: Int): Iterator[Seq[A]] 
Run Code Online (Sandbox Code Playgroud)

通过在它们上面传递"滑动窗口"来对固定大小块中的元素进行分组(而不是像对分组那样对它们进行分区).