我想对 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 .


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!