在地图上,我们可以使用map
通过使用
mapNumber.map{ it.key }
但是,如果我想同时列出两个列表,并且想避免两次map
val numbersInt = mapNumbers.map{ it.key }
val numbersStr = mapNumbers.map{ it.value }
所以我可以在下面写一些东西
fun main(args: Array<String>) {
val mapNumbers = mapOf(Pair(1, "one"), Pair(2, "two"), Pair(3, "three"))
val numbersInt = mutableListOf<Int>()
val numbersStr = mutableListOf<String>()
for ((key, value) in mapNumbers) {
numbersInt.add(key)
numbersStr.add(value)
}
print(numbersInt)
print(numbersStr)
}
但这不好,因为我必须使用mutableListOf
。我想知道是否有任何收集功能可以帮助我们实现这一目标?
答案 0 :(得分:3)
我建议使用unzip()
标准库函数。
fun main(args: Array<String>) {
val mapNumbers = mapOf(Pair(1, "one"), Pair(2, "two"), Pair(3, "three"))
val (numbersInt, numbersStr) = mapNumbers.toList().unzip()
print(numbersInt)
print(numbersStr)
}
在这里,我已经将map
转换为Pair
对象的列表。然后调用unzip()
方法。使用解构声明,我将unzip()
返回的值分配给了这些变量。
请参阅:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/unzip.html。
希望您会喜欢这种解决方案。
答案 1 :(得分:1)
我不确定您为什么不赞成dyukha的评论,您可以将返回的集合保存在您喜欢的任何命名变量中。当然,这是两行代码,但是我认为它仍然非常有效,可以准确表达您想要的内容。
fun main(args: Array<String>) {
val mapNumbers = mapOf(Pair(1, "one"), Pair(2, "two"), Pair(3, "three"))
val numbersInt = mapNumbers.keys
val numbersStr = mapNumbers.values
print(numbersInt)
print(numbersStr)
}