在scala中计算序列后续元素的差异

在scala中计算序列后续元素的差异,scala,Scala,我想在scala工作。有优雅的方式吗 具体来说,我只需要序列中相邻元素的差异。比如说 input = 1,2,6,9 output = 1,4,3 这个怎么样 scala> List(1, 2, 6, 9).sliding(2).map { case Seq(x, y, _*) => y - x }.toList res0: List[Int] = List(1, 4, 3) 这里有一个使用递归的方法,在列表中效果最好 def differences(l:List[Int]) :

我想在scala工作。有优雅的方式吗

具体来说,我只需要序列中相邻元素的差异。比如说

input = 1,2,6,9
output = 1,4,3
这个怎么样

scala> List(1, 2, 6, 9).sliding(2).map { case Seq(x, y, _*) => y - x }.toList
res0: List[Int] = List(1, 4, 3)

这里有一个使用递归的方法,在列表中效果最好

def differences(l:List[Int]) : List[Int] = l match {
  case a :: (rest @ b :: _) => (b - a) :: differences(rest)
  case _ => Nil
}
这里有一个在向量或数组上应该非常快:

def differences(a:IndexedSeq[Int]) : IndexedSeq[Int] = 
  a.indices.tail.map(i => a(i) - a(i-1))
当然,总会有这样的情况:

def differences(a:Seq[Int]) : Seq[Int] = 
  a.tail.zip(a).map { case (x,y) => x - y }
请注意,只有递归版本处理空列表,没有异常