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

Kotlin basics: how to add or set an element of a Map?

我想要 add/set 具有特定键值对的可变映射的元素。 到目前为止,我发现我可以使用加号运算符和 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) interface allows no mutation. The += operator creates a new instance of map and mutates the variable arr3. To modify contents of the map declare the arr3 as 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" 将仅适用于这样声明的变量。

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

  • Java 风格的 put 调用:

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

    此调用 returns 之前与键关联的值,或 null

  • 使用 set operator:

    的更惯用的 Kotlin 调用
    arr["matufacturer"] = "Seegson"
    
  • plusAssign运算符语法:

    arr += "manufacturer" to "Seegson"
    

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