首页 > 解决方案 > 如何减去Scala列表中的两个连续元素?

问题描述

我想用 Scala 中的数字减去列表中的两个连续元素。

例如:我有这个列表:

val sortedList = List(4,5,6)

我想要一个输出列表,比如diffList =(1, 1)where5-4 = 16-5 = 1.

我尝试了以下代码:

var sortedList = List[Int]()
var diffList = List[Int]()

for (i <- 0 to (sortedList.length - 1) ;j <- i + 1 to sortedList.length - 1) 
{
    val diff = (sortedList(j) - sortedList(i))
    diffList = diffList :+ diff
}

我有以下结果,diffList =(1, 2, 1)但我想要diffList = (1,1).

这是因为for循环。它不会一次遍历两个变量(i 和 j)。

标签: listscala

解决方案


你不需要可变性也不需要命令式编程来解决这个问题,函数式编程让你得到了解决。

def consecutiveDifferences(data: List[Int]): List[Int] =
  if (data.isEmpty) List.empty
  else data.lazyZip(data.tail).map {
    case (x, y) => y - x
 }

正如我常说的,Scaladoc是你的朋友。
(另外,作为建议,学习函数式编程的最佳方法是禁止自己使用可变性)


推荐阅读