让我们拥有以下(可变)地图:
(w + x + y + z)
现在我想删除所有指向1 -> A
45 -> A
88 -> R
98 -> X
105 -> A
的项目。我想出了以下代码:
A
但不知怎的,它似乎都没有。那么正确,最优雅的方式是什么?
答案 0 :(得分:4)
执行此操作的一种方法是将地图声明为Map
而不是MutableMap
,并使用自身的过滤版本覆盖它:
var myMap = mapOf(1 to "A", 2 to "B")
myMap = myMap.filterValues { it != "A" }
println(myMap)
如果您想要MutableMap
(但仍然是var
)版本,则类似:
var myMap = mutableMapOf(1 to "A", 2 to "B")
myMap = myMap.filterValues { it != "A" } as MutableMap
println(myMap)
更新:Mario Topolnik正确地指出,在此处投射比调用.toMutableMap()
更有效,因为未创建新副本。
答案 1 :(得分:2)
为什么不喜欢版本1?这就是我要用的。另一种选择:
with(myMap.iterator()) {
forEach { if (it.value == "A") remove() }
}
虽然它还取决于您希望删除的元素数量:只有少数(然后remove
可能更快),或大多数(filterValues
可能更快)?