如何使用 getOrElseUpdate 增加 Map 中的 Int 值?

How to increment an Int value in a Map with getOrElseUpdate?

我可以用 += 更新 mutable.Map 值:

scala> val map = mutable.Map[Int,Int]()
map: scala.collection.mutable.Map[Int,Int] = Map()

scala> map(5) = 5

scala> map
res55: scala.collection.mutable.Map[Int,Int] = Map(5 -> 5)

scala> map(5) += 1

scala> map
res57: scala.collection.mutable.Map[Int,Int] = Map(5 -> 6)

但我不能将 +=getOrElseUpdate 一起使用,我不明白为什么:

scala> map.getOrElseUpdate(5, 0) += 1
<console>:16: error: value += is not a member of Int
  Expression does not convert to assignment because receiver is not assignable.
map.getOrElseUpdate(5, 0) += 1
                          ^

我知道我之前使用过 mutable.SortedMapmutable.ArrayBuffer 值,它让我可以毫无问题地使用该类型的 += 操作和 getOrElseUpdate。我应该使用 mutable.Int 之类的东西吗?

在 scala 中你没有获取变量“引用”的语义,这是因为 scala 的良好风格是你不自己改变变量,所以你不能在这个方法。与其这样,您还可以用函数来描述变异,而不是直接以这种方式变异变量:

  import scala.collection.mutable
  val map = mutable.Map.empty[Int,Int]
  val yourKey: Int = ???
  map.updateWith(yourKey){
    case Some(i) => Some(i+1)
    case None => Some(1)
  }

我在这里使用了这个:https://www.scala-lang.org/api/2.13.6/scala/collection/mutable/Map.html#updateWith(key:K)(remappingFunction:Option[V]=%3EOption[V]):Option[V]

还有 +、+= 和 +:数组缓冲区和其他可变集合中的函数具有其他语义。