我有一个元组列表和一个如下所示的数据
val datum =("R",89)
val dataList = Seq(("R",91),("R",95),("X",96),("S",98))
我想计算列表中元素之间的持续时间,从数据开始,结果将是
res0:> Seq(("R",7) , ("X",2)) //R - 96-89 , X - 98-96
我尝试的东西不起作用
a)我在列表上使用滑动并使用与累加器匹配的模式来保存值。这使用了布尔值和listBuffer来继续将值添加到列表中
b)使用带有累加器元组的map函数和元组的模式匹配,比较_1值,当值改变时,比较重置累加器并收集减法的结果
我在想象是否可以使用foldLeft或fold函数来使它更具功能性#34;。在这种情况下,我们将.foldLeft(List())作为初始值,然后编写一个带有2个元组的map函数,并可能手动比较一个标志。
关于如何做到这一点的任何指示"功能性" b)使用
的地图功能答案 0 :(得分:1)
这是你可以做的事情
首先创建一个带datum
,dataList
和empty list
的函数(这将是最终列表)。然后使用逻辑迭代该函数。
def func(x : Tuple2[String, Int], y : Seq[Tuple2[String, Int]], z: List[Tuple2[String, Int]]) : List[Tuple2[String, Int]] = y match {
case (a::b) => if(x._1 == a._1) func(x, b, z) else func(a, b, z :+ (x._1, a._2-x._2))
case Nil => z
}
现在只需要调用函数
val finalTuples = func(datum, dataList, List.empty[Tuple2[String, Int]])
finalTuples
是finalTuples: List[(String, Int)] = List((R,7), (X,2))