给定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)
如何针对这种情况编写更好的代码?
您可以使用自己的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)