list - 如何减去Scala列表中的两个连续元素?
问题描述
我想用 Scala 中的数字减去列表中的两个连续元素。
例如:我有这个列表:
val sortedList = List(4,5,6)
我想要一个输出列表,比如diffList =(1, 1)
where5-4 = 1
和6-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)。
解决方案
你不需要可变性也不需要命令式编程来解决这个问题,函数式编程让你得到了解决。
def consecutiveDifferences(data: List[Int]): List[Int] =
if (data.isEmpty) List.empty
else data.lazyZip(data.tail).map {
case (x, y) => y - x
}
正如我常说的,Scaladoc是你的朋友。
(另外,作为建议,学习函数式编程的最佳方法是禁止自己使用可变性)
推荐阅读
- terraform - 如何在 terraform 中创建非结构化数据
- netsuite - NetSuite 脚本在线表单创建案例记录
- jquery - 如何在 .jquery 中获取特定的孩子?
- excel - 根据两列的值删除行
- python - 尝试使用统计库为大型数据集计算 mode() 时出现 StatisticsError
- java - 尝试验证 json 架构时出错
- java - R 继续使用 Java12 和 Broken JNI 错误
- mysql - 从 mariadb 中删除清除重复/乘法记录
- c# - 错误 CS0161 'RateController.GetRateById(long)':并非所有代码路径都返回值
- sql - 如果先前的 CTE 确实访问关系或错误字符串不包含参数,PostgreSQL 11 返回 null 而不是异常