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

我想用特定的键值对添加/设置可变映射的元素。 到目前为止,我发现我可以使用plus运算符和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 

请你详细说明我该怎么做?

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

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

或更惯用

 var arr = mutableMapOf<Any, Any>() 

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

换句话说,你可以使用不可变类型的可变变量:

 var arr = mapOf<Any,Any>() 

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

或者你可以使用带有不可变arr变量的MutableMap ,并修改arr指向的内容:

 val arr = mutableMapOf<Any,Any>() 

显然你只能修改MutableMap内容。 所以arr["manufacturer"] = "Seegson"只能用于声明的变量。

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

  • Java风格的调用:

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

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

  • 使用set操作符的更科学的Kotlin调用:

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

     arr += "manufacturer" to "Seegson" 

    这个选项引入了在调用之前创建的Pair开销,并且由于它可能与var重新分配混淆(也因为不明确而不适用于var s),所以它的可读性较差,但是如果已经有一个Pair ,你想添加。