gpt4 book ai didi

kotlin - 克隆 MutableMap 的惯用方法是什么?

转载 作者:行者123 更新时间:2023-12-02 13:15:21 28 4
gpt4 key购买 nike

我有一个名为 translations 的 MutableMap。我想将其克隆到另一个 MutableMap 或 Map 中。我使用以下方法完成了此操作:translations.map { it.key to it.value }.toMap()

这对我来说“感觉”不对。是否有更惯用的方法来克隆 MutableMap?

最佳答案

在 Kotlin 1.1+ 中,您可以使用 toMutableMap :

val mutableMap = mutableMapOf("a" to 1, "b" to 2)
val mutableMapCopy = mutableMap.toMutableMap()
mutableMap.clear()
println(mutableMap) //=> {}
println(mutableMapCopy) //=> {a=1, b=2}

Kotlin Playground :https://pl.kotl.in/LGhPpdjv5


Kotlin 1.0.x 标准库没有定义复制 map 的惯用方式。 更多惯用的方法是 map.toList().toMap() 但有时在 Kotlin 中做某​​事的惯用的方法是简单地定义你自己的 extensions .例如:

fun <K, V> Map<K, V>.toMap(): Map<K, V> = when (size) {
0 -> emptyMap()
1 -> with(entries.iterator().next()) { Collections.singletonMap(key, value) }
else -> toMutableMap()
}

fun <K, V> Map<K, V>.toMutableMap(): MutableMap<K, V> = LinkedHashMap(this)

以上扩展函数与release 1.1-M03 (EAP-3)中定义的非常相似.

来自 kotlin/Maps.kt at v1.1-M03 · JetBrains/kotlin :

/**
* Returns a new read-only map containing all key-value pairs from the original map.
*
* The returned map preserves the entry iteration order of the original map.
*/
@SinceKotlin("1.1")
public fun <K, V> Map<out K, V>.toMap(): Map<K, V> = when (size) {
0 -> emptyMap()
1 -> toSingletonMap()
else -> toMutableMap()
}

/**
* Returns a new mutable map containing all key-value pairs from the original map.
*
* The returned map preserves the entry iteration order of the original map.
*/
@SinceKotlin("1.1")
public fun <K, V> Map<out K, V>.toMutableMap(): MutableMap<K, V> = LinkedHashMap(this)

关于kotlin - 克隆 MutableMap 的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916806/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com