Scala:计算总和

时间:2017-07-22 04:57:00

标签: scala

假设Scala中的以下简单代码计算总和

var sum = 0
for (xs <- xss; x <- xs) sum +=x

以这种方式计算总和有副作用。如何在没有副作用的情况下这样做?

1 个答案:

答案 0 :(得分:1)

假设您的xssList of List

scala> val collection = List(List(1, 2, 3, 4), List(5, 6, 7, 8))
collection: List[List[Int]] = List(List(1, 2, 3, 4), List(5, 6, 7, 8))

scala> var sum = 0
sum: Int = 0

scala> for (xs <- collection; x <- xs) sum +=x

scala> sum
res4: Int = 36

更短的方法是展平你的收藏并总结元素

scala> collection.flatten.sum
res7: Int = 36

另外,您可以按照自己的方式折叠整个系列。

scala> collection.flatten.foldLeft(0)((a, b) => a + b)
res9: Int = 36

// or without flattening
scala> collection.foldLeft(0)((a, b) => a + b.sum)
res14: Int = 36

或可能有reducedLeft

scala> collection.flatten.reduceLeft((a, b) => a + b)
res10: Int = 36

但是自收集.sum以来,您应该使用.sum