You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Map.minus方法应如何使用?为何减去Map未移除对应键值对?

Kotlin Map.minus方法运行逻辑与正确用法

核心运行逻辑

Map.minus的作用是从原Map中移除指定键对应的条目,返回保留原顺序的新Map,该方法的所有重载仅接收键/键集合类型的参数:

  • 重载1:接收单个K类型的键,移除对应单个条目
  • 重载2:接收Iterable<K>类型的键集合,移除集合内所有键对应的条目
  • 重载3:接收Array<out K>类型的键数组,移除数组内所有键对应的条目
  • 重载4:接收Sequence<K>类型的键序列,移除序列内所有键对应的条目

代码不符合预期的原因

你传入minus方法的参数是right(Map类型),而Map本身实现了Iterable<Map.Entry<K,V>>接口,触发的是参数为Iterable<K>的重载,相当于你要移除的"键"是right的所有Entry对象,和原Map的Int类型键完全不匹配,因此没有任何条目被移除,输出和原Map一致。

正确使用方式

移除单个指定键

直接传入对应键即可:

// 移除key为1的条目
val diff = left.minus(1)

移除另一个Map中所有键对应的条目

传入另一个Map的keys属性,即可得到你预期的结果:

fun main() 
{
    val left = mapOf(1 to "first", 2 to "second")
    val right = mapOf(1 to "first")
    val diff = left.minus(right.keys)
    
    println(left)
    println(right)
    println(diff)  
}

运行输出:

{1=first, 2=second}
{1=first}
{2=second}

批量移除多个指定键

可传入任意键的集合、数组、序列:

// 移除key为1、2的条目
val diff = left.minus(listOf(1,2))

内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:24:03