如何使用 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.SortedMap
和 mutable.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)
}
还有 +、+= 和 +:数组缓冲区和其他可变集合中的函数具有其他语义。
我可以用 +=
更新 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.SortedMap
和 mutable.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)
}
还有 +、+= 和 +:数组缓冲区和其他可变集合中的函数具有其他语义。