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
,你想添加。