如何增加一个Int值在地图与getOrElseUpdate?



我可以更新一个可变的。映射值与+=:

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.ArrayBuffer值的mutable.SortedMap,它让我使用该类型的+=操作与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]

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

相关内容

  • 没有找到相关文章

最新更新