我有以下地图:
val m: mutable.Map[String, Long] = mutable.Map()
如果不存在,我想给它一些价值。如果它依次存在,我想进行一些计算:
目前我是按照以下方式进行的:
val key: String = //...
val value: Long = //...
m(key) = m.getOrElse(key, 0L) + value
但这对我来说有点冗长(在Java中我们有putIfAbsent
方法)。在Scala中有更短的方法吗?
答案 0 :(得分:6)
您正在寻找mutable.Map.getOrElseUpdate
:
m.getOrElseUpdate(key, value)
答案 1 :(得分:4)
对于mutable maps,您可以覆盖default
方法,也可以使用withDefault
添加默认计算,以便在首次访问时自动计算所有缺失值:
val m = new HashMap[String, Int].withDefault(k => 0)
然后你可以像这样更新值:
m("foo") += 5
m("bar") += 7
m("foo") += 37
println(m) // Map(foo -> 42, bar -> 7)