加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何对scala中的相邻元素求和

发布时间:2020-12-16 18:45:57 所属栏目:安全 来源:网络整理
导读:我想在 scala中对相邻元素求和,我不知道如何处理最后一个元素. 所以我有一个清单: val x = List(1,2,3,4) 我想使用索引和映射来对相邻元素求和: val size = x.indices.sizeval y = x.indices.map(i = if (i size - 1) x(i) + x(i+1)) 问题是这种方法在最后
我想在 scala中对相邻元素求和,我不知道如何处理最后一个元素.

所以我有一个清单:

val x = List(1,2,3,4)

我想使用索引和映射来对相邻元素求和:

val size = x.indices.size
val y = x.indices.map(i => 
    if (i < size - 1)
       x(i) + x(i+1))

问题是这种方法在最后创建了一个AnyVal元素:

res1: scala.collection.immutable.IndexedSeq[AnyVal] = Vector(3,5,7,())

如果我尝试对集合中的元素或其他数字方法求和,则它不起作用:

error: could not find implicit value for parameter num: Numeric[AnyVal]

我尝试使用以下方法过滤掉元素:

y diff List(Unit) or y diff List(AnyVal)

但它不起作用.

在scala中有没有更好的方法来做这种类型的相邻和而不使用foor循环?

解决方法

对于更实用的解决方案,您可以使用滑动将元素组合成两个(或任意数量),然后映射到它们的总和.

scala> List(1,4).sliding(2).map(_.sum).toList
res80: List[Int] = List(3,7)

slide(2)将做的是创建一个像这样的列表的中间迭代器:

Iterator(
    List(1,2),List(2,3),List(3,4)
)

因此,当我们链接map(_.sum)时,我们将每个内部List映射到它自己的总和. toList会将Iterator转换回List.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读