Map.compute 在 scala.collection.mutable.Map 中的等效函数是什么
what is equivalent function of Map.compute in scala.collection.mutable.Map
Java 在 java.util.Map 中有一个名为 compute
的方法,它提供了一种在映射中存在或不存在键时更新映射的方法。
scala.collection.mutable.Map有没有类似的功能?
您可以使用 update
和 getOrElse
,如
val x= scala.collection.mutable.Map("a"->1,"b"->2)
x.update("c",x.getOrElse("c",1)+41)
x.update("a",x.getOrElse("a",1)+41)
mutable.MapLike
特征中定义了 getOrElseUpdate
,它完全符合您的要求:
def getOrElseUpdate(key: K, op: ⇒ V): V
If given key is already in this map, returns associated value.
Otherwise, computes value from given expression op, stores with key in map and returns that value.
上面的正确答案可以通过为没有密钥的情况配置默认值来简化。此外,读取然后更新值可以由一个操作员完成 map("key") += value
val map = collection.mutable.Map("a" -> 1, "b" -> 2).withDefaultValue(1)
map("c") += 41
map("a") += 41
println(map)
returns 地图(b -> 2, a -> 42, c -> 42)
Java 在 java.util.Map 中有一个名为 compute
的方法,它提供了一种在映射中存在或不存在键时更新映射的方法。
scala.collection.mutable.Map有没有类似的功能?
您可以使用 update
和 getOrElse
,如
val x= scala.collection.mutable.Map("a"->1,"b"->2)
x.update("c",x.getOrElse("c",1)+41)
x.update("a",x.getOrElse("a",1)+41)
mutable.MapLike
特征中定义了 getOrElseUpdate
,它完全符合您的要求:
def getOrElseUpdate(key: K, op: ⇒ V): V
If given key is already in this map, returns associated value. Otherwise, computes value from given expression op, stores with key in map and returns that value.
上面的正确答案可以通过为没有密钥的情况配置默认值来简化。此外,读取然后更新值可以由一个操作员完成 map("key") += value
val map = collection.mutable.Map("a" -> 1, "b" -> 2).withDefaultValue(1)
map("c") += 41
map("a") += 41
println(map)
returns 地图(b -> 2, a -> 42, c -> 42)