scala - 如何在scala中对相邻元素求和

标签 scala collections

我想对 Scala 中的相邻元素求和,但我不确定如何处理最后一个元素。

所以我有一个 list :

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

我想使用 对相邻元素求和指数 map :
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)

但它不起作用。

在不使用 foo 循环的情况下,scala 中是否有更好的方法来执行这种类型的相邻求和?

最佳答案

如需更多功能的解决方案,您可以使用 sliding将元素分成两部分(或任意数量),然后 map到他们的 sum .

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

什么 sliding(2)要做的是创建一个像这样的列表的中间迭代器:
Iterator(
    List(1, 2),
    List(2, 3),
    List(3, 4)
)

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

关于scala - 如何在scala中对相邻元素求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29259950/

相关文章:

scala - Spark CSV writer 为空字符串输出双引号

scala - 如何根据基于Spark中另一个RDD的函数过滤RDD?

scala - 在 elastic4s 上找不到值索引错误

arrays - 具有重复项的 Powershell 组哈希数组

c# - 如何合并两个 NameValueCollection?

java - 相等的对象必须具有相等的哈希码?

scala - 什么是基于规则验证的 Scala 惯用方法?

scala - 将 Spark DataFrame 保存到具有 map<string,string> 列类型的 csv 文件

java - 单线程 Contains(Point(x,y)) 功能最快的 Java 集合是什么?

java - 为什么Java标准库中没有栈集合类型的接口(interface)?