Kotlin 基础知识:如何添加或设置 Map 的元素?



我想添加/设置具有特定键值对的可变映射的元素。 到目前为止,我想到我可以使用加号运算符和 Pair 数据类型添加新元素:

var arr3:Map<Any, Any> = mutableMapOf()
arr3 += Pair("manufacturer", "Weyland-Yutani")
//also, the "to" operator works too:
//arr3 += ("manufacturer" to "Weyland-Yutani")

但是,我找不到如何修改或添加新的键值对:

arr3["manufacturer"] = "Seegson"  // gives an error( Kotlin: No set method providing array access)
arr3["manufacturer"] to "Seegson" // compiles, but nothing is added to the array

你能详细说明我怎么做吗?

您已经声明了具有显式Map<Any, Any>类型的可变arr3Map)接口不允许突变。+=运算符创建一个新的 map 实例,并将变量arr3更改为 。要修改映射的内容,请将arr3声明为MutableMap如下所示:

var arr3:MutableMap<Any, Any> = mutableMapOf()

或更惯用

var arr = mutableMapOf<Any, Any>()

请注意,通常您需要可变变量var或可变实例类型MutableMap但根据我的经验,两者很少。

换句话说,您可以将可变变量与不可变类型一起使用:

var arr = mapOf<Any,Any>()

并使用运算符+=修改arr指向的位置

或者,您可以将MutableMap与不可变的arr变量一起使用,并修改arr指向的内容:

val arr = mutableMapOf<Any,Any>()

显然,您只能修改MutableMap内容。因此arr["manufacturer"] = "Seegson"仅适用于声明为这样的变量。

关于添加/设置操作,这些操作可以在MutableMap<K, V>上执行(不仅仅是Map<K, V>),并且可以通过多种方式完成:

  • Java 风格的put调用:

    arr3.put("manufacturer", "Seegson")
    

    此调用返回以前与键关联的值,或null

  • 使用set运算符的更惯用的 Kotlin 调用:

    arr["matufacturer"] = "Seegson"
    
  • plusAssign运算符语法:

    arr += "manufacturer" to "Seegson"
    

    此选项引入了在调用之前创建的Pair开销,并且可读性较差,因为它可能会与var重新分配混淆(此外,由于歧义,它不适用于var),但当您已经有要添加的Pair时仍然很有用。

最新更新