从不可变映射和附加键值创建新映射的 Kotlin 标准方法
Kotlin standard approach of making new map from an immutable map and additional key-value
Kotlin 中是否有将新键值对与不可变映射相关联的标准方法?
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"}
很明显如何让它直接将条目复制到新映射中,但我相信在 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)
请注意,地图的正确术语是“只读”地图,而不是“不可变”地图。 Map 通常是引擎盖下的 MutableMap,已转换为只读 Map,因此它实际上并不是不可变的。 Kotlin 中有一个常见的模式,即 class 通过 属性 公开对可变集合的访问,将其向上转换为只读实现,但继续为外部 class 改变该引用es观察变化。
Kotlin 中是否有将新键值对与不可变映射相关联的标准方法?
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"}
很明显如何让它直接将条目复制到新映射中,但我相信在 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)
请注意,地图的正确术语是“只读”地图,而不是“不可变”地图。 Map 通常是引擎盖下的 MutableMap,已转换为只读 Map,因此它实际上并不是不可变的。 Kotlin 中有一个常见的模式,即 class 通过 属性 公开对可变集合的访问,将其向上转换为只读实现,但继续为外部 class 改变该引用es观察变化。