计算scala

时间:2017-11-04 10:57:15

标签: scala

我有一个元组列表和一个如下所示的数据

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)使用

的地图功能

1 个答案:

答案 0 :(得分:1)

这是你可以做的事情

首先创建一个带datumdataListempty 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]])

finalTuplesfinalTuples: List[(String, Int)] = List((R,7), (X,2))