在Kotlin中复制地图最聪明的方法是什么?

N. *_*sev 32 kotlin

我想获得一些具有相同内容的Map的新实例,但Map没有内置copy方法.我可以这样做:

val newInst = someMap.map { it.toPair() }.toMap()
Run Code Online (Sandbox Code Playgroud)

但它看起来相当难看.还有更聪明的方法吗?

Ing*_*gel 53

只需使用HashMap构造函数:

val original = hashMapOf(1 to "x")
val copy = HashMap(original)
Run Code Online (Sandbox Code Playgroud)

Kotlin 1.1更新:

自Kotlin 1.1起,扩展功能Map.toMapMap.toMutableMap创建副本.

  • 如果希望结果为只读类型,请手动声明类型或使用强制转换:`val copy:Map <Int,String> = HashMap(original)`或`val copy = HashMap(original)as Map < Int,String>`.如果重复执行此操作,请编写扩展功能. (2认同)
  • @ N.Kudriavtsev映射不是不可变的,它们只是从只读接口访问.因此,如果最后使用readonly变量保存它,上面的示例确实有效. (2认同)

mar*_*ira 5

使用putAll方法:

val map = mapOf("1" to 1, "2" to 2)
val copy = hashMapOf<String, Int>()
copy.putAll(map)
Run Code Online (Sandbox Code Playgroud)

要么:

val map = mapOf("1" to 1, "2" to 2)
val copy = map + mapOf<String, Int>() // preset
Run Code Online (Sandbox Code Playgroud)

你的方式对我来说也很惯用.