Котлин: Как отобразить в два списка - PullRequest
1 голос
/ 11 апреля 2019

С карты мы могли бы использовать 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. Интересно, есть ли какая-нибудь функция сбора, которая могла бы помочь нам достичь этого?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2019

Я бы предложил использовать 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 голос
/ 13 апреля 2019

Я не уверен, почему вы проигнорировали комментарий Дюхи, вы можете сохранить возвращенные коллекции в любой именованной переменной, которая вам нравится. Конечно, это две строки кода, но я думаю, что он все еще очень эффективен и выражает именно то, что вы хотите.

   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)   
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...