26

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

你能详细说明我该怎么做吗?

4

2 回答 2

33

您已经声明了 mutablearr3的显式类型Map<Any, Any>。)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变量并修改 wherearr指向的内容:

val arr = mutableMapOf<Any,Any>()

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

于 2017-03-06T13:44:02.470 回答
17

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

  • Java 风格的put调用:

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

    此调用返回先前与键关联的值,或null

  • 使用set运算符的更惯用的 Kotlin 调用:

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

    arr += "manufacturer" to "Seegson"
    

    此选项在调用之前引入了Paircreated 的开销,并且可读性较差,因为它可能与var重新分配混淆(此外,由于歧义,它不适用于vars),但当您已经有了Pair要添加的 a 时仍然很有用.

于 2017-03-06T13:55:38.840 回答