我想在scala中做到这一点.有优雅的方式吗?
具体来说,我只想要序列中相邻元素的区别.例如
input = 1,2,6,9
output = 1,4,3
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
scala> List(1, 2, 6, 9).sliding(2).map { case Seq(x, y, _*) => y - x }.toList
res0: List[Int] = List(1, 4, 3)
Run Code Online (Sandbox Code Playgroud)
这是一个使用递归并在列表中最佳工作
def differences(l:List[Int]) : List[Int] = l match {
case a :: (rest @ b :: _) => (b - a) :: differences(rest)
case _ => Nil
}
Run Code Online (Sandbox Code Playgroud)
这是一个应该在Vector或Array上非常快的:
def differences(a:IndexedSeq[Int]) : IndexedSeq[Int] =
a.indices.tail.map(i => a(i) - a(i-1))
Run Code Online (Sandbox Code Playgroud)
当然总有这个:
def differences(a:Seq[Int]) : Seq[Int] =
a.tail.zip(a).map { case (x,y) => x - y }
Run Code Online (Sandbox Code Playgroud)
请注意,只有递归版本处理空列表而没有异常.