如何将2个数组转换为地图

时间:2017-08-30 14:38:47

标签: kotlin

我有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个列表。

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)