Kotlin 基础知识:如何添加或设置 Map 的元素?
Kotlin basics: how to add or set an element of a Map?
我想要 add/set 具有特定键值对的可变映射的元素。
到目前为止,我发现我可以使用加号运算符和 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
) interface allows no mutation. The +=
operator creates a new instance of map and mutates the variable arr3
. To modify contents of the map declare the arr3
as 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"
将仅适用于这样声明的变量。
关于 add/set 操作,这些可以在 MutableMap<K, V>
上执行(而不仅仅是 Map<K, V>
)并且可以通过多种方式完成:
Java 风格的 put
调用:
arr3.put("manufacturer", "Seegson")
此调用 returns 之前与键关联的值,或 null
。
使用 set
operator:
的更惯用的 Kotlin 调用
arr["matufacturer"] = "Seegson"
plusAssign
运算符语法:
arr += "manufacturer" to "Seegson"
此选项引入了在调用之前创建的 Pair
的开销并且可读性较差,因为它可能与 var
重新分配混淆(另外,它不适用于 var
s 因为含糊不清),但当您已经有要添加的 Pair
时仍然有用。
我想要 add/set 具有特定键值对的可变映射的元素。 到目前为止,我发现我可以使用加号运算符和 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
) interface allows no mutation. The +=
operator creates a new instance of map and mutates the variable arr3
. To modify contents of the map declare the arr3
as 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"
将仅适用于这样声明的变量。
关于 add/set 操作,这些可以在 MutableMap<K, V>
上执行(而不仅仅是 Map<K, V>
)并且可以通过多种方式完成:
Java 风格的
put
调用:arr3.put("manufacturer", "Seegson")
此调用 returns 之前与键关联的值,或
null
。使用
的更惯用的 Kotlin 调用set
operator:arr["matufacturer"] = "Seegson"
plusAssign
运算符语法:arr += "manufacturer" to "Seegson"
此选项引入了在调用之前创建的
Pair
的开销并且可读性较差,因为它可能与var
重新分配混淆(另外,它不适用于var
s 因为含糊不清),但当您已经有要添加的Pair
时仍然有用。