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

Ger*_*csy 9 arrays kotlin mutablemap

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

你能详细说明怎么做吗?

mie*_*sol 17

你已经arr3使用显式类型声明了mutable Map<Any, Any>.本Map)接口允许任何突变.在+=操作创建地图的一个新实例,并发生变异的变量arr3.要修改地图的内容,申报arr3MutableMap,像这样:

var arr3:MutableMap<Any, Any> = mutableMapOf()
Run Code Online (Sandbox Code Playgroud)

或更多惯用语

var arr = mutableMapOf<Any, Any>()
Run Code Online (Sandbox Code Playgroud)

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

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

var arr = mapOf<Any,Any>()
Run Code Online (Sandbox Code Playgroud)

并使用+=运营商修改哪里 arr点.

或者您可以使用MutableMap不可变arr变量并修改where arr指向的内容:

val arr = mutableMapOf<Any,Any>()
Run Code Online (Sandbox Code Playgroud)

显然你只能修改MutableMap内容.因此,arr["manufacturer"] = "Seegson"只能使用声明为此的变量.

  • **“+=运算符创建了一个新的map实例并改变了变量arr3”**该死,这种行为欺骗了我(错误的类型是我的错)。感谢您的详细解答! (2认同)

hot*_*key 5

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