Dictionary Kotlin从不可变映射和附加键值生成新映射的标准方法

Dictionary Kotlin从不可变映射和附加键值生成新映射的标准方法,dictionary,kotlin,data-structures,immutability,Dictionary,Kotlin,Data Structures,Immutability,Kotlin中有没有标准的方法将新的键值对与不可变映射相关联 associate(mapOf("A" to 1, "B" to 2), "C", 3); // => {A=1, B=2, C=3} 思考与Clojure中的函数类似的东西 (assoc {:key1 "value1" :key2 "value2"} :key3 "value3")

Kotlin中有没有标准的方法将新的键值对与不可变映射相关联

associate(mapOf("A" to 1, "B" to 2), "C", 3); // => {A=1, B=2, C=3}
思考与Clojure中的函数类似的东西

(assoc {:key1 "value1" :key2 "value2"} :key3 "value3")   
                                    ;;=> { :key1 "value1", :key2 "value2", :key3 "value3"}

很明显,如何将条目直接复制到一个新的映射中,但我相信在Kotlin标准库中实现了更为优化的方法。你能给出一个习惯用法的例子吗?

这是使用加号运算符完成的

val map1 = mapOf("A" to 1, "B" to 2)
val map2 = map1 + ("C" to 3)

// or for a read-write variable/property:
var map = mapOf("A" to 1, "B" to 2)
map += "C" to 3
如果要一次添加多个项目,可以将任意集合或对数组置于加号之后:

val map1 = mapOf("A" to 1, "B" to 2)
val map2 = map1 + arrayOf("C" to 3, "D" to 4)

请注意,映射的正确术语是“只读”映射,而不是“不可变”映射。映射通常是隐藏在引擎盖下的可变映射,已转换为只读映射,因此它实际上不是不可变的。Kotlin中有一种常见的模式,即类通过一个属性公开对可变集合的访问,该属性将其升级为只读实现,但继续为外部类修改该引用以观察更改。

这是使用加号操作符完成的

val map1 = mapOf("A" to 1, "B" to 2)
val map2 = map1 + ("C" to 3)

// or for a read-write variable/property:
var map = mapOf("A" to 1, "B" to 2)
map += "C" to 3
如果要一次添加多个项目,可以将任意集合或对数组置于加号之后:

val map1 = mapOf("A" to 1, "B" to 2)
val map2 = map1 + arrayOf("C" to 3, "D" to 4)

请注意,映射的正确术语是“只读”映射,而不是“不可变”映射。映射通常是隐藏在引擎盖下的可变映射,已转换为只读映射,因此它实际上不是不可变的。Kotlin中有一种常见的模式,即类通过一个属性公开对可变集合的访问,该属性将其升级为只读实现,但继续变异该引用以供外部类观察更改。

简单的方法是:
mapOf(“a”到1,“B”到2)+(“C”到3)
应该可以正常工作(结果是一个新的地图顺便说一句)。我不确定这是否是一个惯用的方法,所以不把它作为一个答案。一些简单的东西:
mapOf(“a”到1,“B”到2)+(“C”到3)
应该可以很好地工作(结果是一个新的地图顺便说一句)。我不确定这是否是一种惯用的方法,因此不将此作为答案。特别感谢您对Kotlin的“只读”方法的评论。特别感谢您对Kotlin的“只读”方法的评论。