我想在地图中添加所有值,而不使用var或任何可变结构。我试图做这样的事情,但它确实有效:
val mymap = ("a" -> 1, "b" -> 2)
val sum_of_alcohol_consumption =
for ((k,v) <- mymap ) yield (sum_of_alcohol_consumption += v)
我被告知我可以在列表中使用.sum 请帮忙
由于
答案 0 :(得分:4)
您可以使用Map的.values
函数返回其值的Iterable List(所有整数),然后在其上调用.sum
函数:
val myMap = Map("a" -> 1, "b" -> 2)
val sum = myMap.values.sum
println(sum) // Outputs: 3
答案 1 :(得分:1)
更优雅地使用sum
的等效答案是使用fold
操作。 sum
的实现方式与此类似:
val myMap = Map("a" -> 1, "b" -> 2)
val sumAlcoholConsumption = myMap.values.foldLeft(0)(_ + _)
values
仅返回地图中值的序列。第一个foldLeft
参数是操作的零值(将其视为累加器值的初始值)。第二个参数是一个函数,它将累加器的当前值添加到当前元素,返回两个值的总和 - 并依次应用于每个值。也就是说,sum
更方便。
答案 2 :(得分:0)
为了获得map的唯一值,它提供了一个将返回iterable的函数值,我们可以直接将sum函数应用于它。
scala> val mymap = Map("a" -> 1, "b" -> 2)
mymap: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2)
scala> mymap.values.sum
res7: Int = 3