我有2个数组,一个用字符串作为键,另一个用整数作为值。如何将它们转换为地图?
val keys = arrayOf("butter", "milk", "apples")
val values = arrayOf(5, 10, 42)
val map: Map<String, Int> = ???
编辑:我知道How to convert List to Map in Kotlin?,但它没有解决这个问题,因为我有2个列表。
答案 0 :(得分:14)
您可以将数组压缩在一起以获取对的列表(List<Pair<String, Int>>
),然后使用toMap
来获取地图。
像这样:
val keys = arrayOf("butter", "milk", "apples")
val values = arrayOf(5, 10, 42)
val map: Map<String, Int> =
keys.zip(values) // Gives you [("butter", 5), ("milk", 10), ("apples", 42)]
.toMap() // This is an extension function on Iterable<Pair<K, V>>
答案 1 :(得分:1)
根据科特林 Constructing Collections ->创建短寿命的Pair对象,仅在性能不是很关键的情况下才建议这样做,并引用:“为避免过多的内存使用,请使用其他方法。例如,您可以创建一个可变的映射并使用write填充它操作。apply()函数有助于使初始化在此处保持流畅。”
因为我不是很多专家,所以我继续使用这些代码,也许这应该更好用?:
val numbersMap = mutableMapOf<String,Int>()
.apply{ for (i in 1.. 5) this["key$i"] = i }
println(numbersMap)
//result = {key1=1, key2=2, key3=3, key4=4}
或将其调整为上述问题-诸如此类:
val keys = arrayOf("butter", "milk", "apples")
val values = arrayOf(5, 10, 42)
val mapNumber = mutableMapOf<String, Int>()
.apply { for (i in keys.indices) this[keys[i]] = values[i] }
println(mapNumber)