如何删除指向给定值的所有键

时间:2018-05-15 12:10:47

标签: kotlin

让我们拥有以下(可变)地图:

(w + x + y + z)

现在我想删除所有指向1 -> A 45 -> A 88 -> R 98 -> X 105 -> A 的项目。我想出了以下代码:

A

但不知怎的,它似乎都没有。那么正确,最优雅的方式是什么?

2 个答案:

答案 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可能更快)?