Kotlin标准的方法,从一个不可变的map和额外的key-value创建新的map

px9o7tmv  于 2023-03-30  发布在  Kotlin
关注(0)|答案(1)|浏览(120)

在Kotlin中,是否有一种标准的方式将新的键值对与不可变的Map关联起来?

associate(mapOf("A" to 1, "B" to 2), "C", 3); // => {A=1, B=2, C=3}

考虑类似于Clojure中的accos函数的东西。

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

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

qyzbxkaa

qyzbxkaa1#

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

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)

请注意,Map的正确术语是“只读”map,而不是“不可变”map。Map通常是一个已转换为只读Map的MutableMap。在Kotlin中有一种常见的模式,即类通过一个属性暴露对可变集合的访问,该属性将其向上转换为一个读-仅实现,但继续改变该引用以供外部类观察变化。

相关问题