首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中取对列表中元素的差异

在Scala中取对列表中元素的差异
EN

Stack Overflow用户
提问于 2018-07-11 14:23:22
回答 3查看 1.2K关注 0票数 1

有一个列表,让我们说:1,2,3,我试图找出每两个连续数字的差异,然后再把它们加起来。

上面的列表会给出:(2-1)+(3-2)=2。我正在寻找一种不使用循环的解决方案。代码:

代码语言:javascript
复制
val e = List((0,true), (2,true), (7,true))
val w = e.foldLeft(e(0)){ (z1,z2) => z2._1 - z1._1  }

请任何人提供一个建议,为什么上面的代码是错误的?

谢谢您抽时间见我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-11 15:00:38

首先,需要使用map将元组列表转换为整数列表。

代码语言:javascript
复制
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))

生产:

代码语言:javascript
复制
res1: Int = 7
res2: Int = 2
票数 3
EN

Stack Overflow用户

发布于 2018-07-13 15:49:02

代码语言:javascript
复制
 e.unzip._1.sliding(2).map{case List(i, j) => j-i}.sum

SCALA中的测试:

代码语言:javascript
复制
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>
票数 1
EN

Stack Overflow用户

发布于 2018-07-11 14:39:59

您可以使用e.foldLeft(e(0)){ (z1,z2) => (z2._1 - z1._1,z2._2)}._1来获得它。

原因是,您试图更改元素类型,这是不允许的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51287985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档