我想添加/设置具有特定键值对的可变映射的元素。 到目前为止,我想到我可以使用加号运算符和 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>
类型的可变arr3
。Map
)接口不允许突变。+=
运算符创建一个新的 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
时仍然很有用。