与前一个元素折叠

ntv*_*t18 3 scala fold

给定val as: Seq[Int] = ...

很多时候我需要对两个连续的元素应用操作,例如

顺便说一句我不喜欢

for (i <- 1 until as.size) {
  // do something with as(i) and as(i - 1)
}
Run Code Online (Sandbox Code Playgroud)

或者通过另一个

as.tail.foldLeft((0, as.head)) { (acc, e) =>
  // do something with acc._2 and e 
  // and try to not forget returning (_, e) 
}
Run Code Online (Sandbox Code Playgroud)

如何针对这种情况编写更好的代码?

And*_*kin 5

您可以使用自己的zip序列:astail

for ((prev, curr) <- as zip as.tail) {
  // do something with `prev` and `curr`
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用sliding

for (window <- as.sliding(2)) {
  val prev = window(0)
  val curr = window(1)
  // do something with `prev` and `curr`
}
Run Code Online (Sandbox Code Playgroud)