有一个列表,让我们说:1,2,3,我试图找出每两个连续数字的差异,然后再把它们加起来。
上面的列表会给出:(2-1)+(3-2)=2。我正在寻找一种不使用循环的解决方案。代码:
val e = List((0,true), (2,true), (7,true))
val w = e.foldLeft(e(0)){ (z1,z2) => z2._1 - z1._1 }请任何人提供一个建议,为什么上面的代码是错误的?
谢谢您抽时间见我。
发布于 2018-07-11 15:00:38
首先,需要使用map将元组列表转换为整数列表。
def sum(list: List[Int]) = {
list.sliding(2).toList.map {
case List(v1, v2) => v2 - v1
}.sum
}
val e1 = List(0 -> true, 2 -> true, 7 -> true)
val res1 = sum(e1.map(_._1))
val e2 = List(1 -> true, 2 -> true, 3 -> true)
val res2 = sum(e2.map(_._1))生产:
res1: Int = 7
res2: Int = 2发布于 2018-07-13 15:49:02
e.unzip._1.sliding(2).map{case List(i, j) => j-i}.sumSCALA中的测试:
scala> val e1 = List(0 -> true, 2 -> true, 7 -> true)
e1: List[(Int, Boolean)] = List((0,true), (2,true), (7,true))
scala> e1.unzip._1.sliding(2).map{case List(i, j) => j-i}.sum
res190: Int = 7
scala> val e2 = List(1 -> true, 2 -> true, 3 -> true)
e2: List[(Int, Boolean)] = List((1,true), (2,true), (3,true))
scala> e2.unzip._1.sliding(2).map{case List(i, j) => j-i}.sum
res191: Int = 2
scala>发布于 2018-07-11 14:39:59
您可以使用e.foldLeft(e(0)){ (z1,z2) => (z2._1 - z1._1,z2._2)}._1来获得它。
原因是,您试图更改元素类型,这是不允许的。
https://stackoverflow.com/questions/51287985
复制相似问题