Расстегнуть молнию для Triple in Kotlin - PullRequest
0 голосов
/ 02 марта 2020

В kotlin, если у меня есть пара, я могу получить список первых и вторых значений, например:

val(firstList, secondList) = listOfPairs.unzip()
// listOfPairs: List<Pair<String, Long>>

Как я могу сделать то же самое для Triple?

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Как примерно так:

fun <X>List<Triple<X,X,X>>.unzip(): List<List<X>> {
    return fold(listOf(ArrayList<X>(), ArrayList<X>(), ArrayList<X>())){ r, i ->
        r[0].add(i.first)
        r[1].add(i.second)
        r[2].add(i.third)
        r
    }
}

Использование:

val triplesList = listOf(Triple(1,"s",3), Triple(1,"u",3), Triple(1,"p",3))
val (listOne, listTwo, listThree) = triplesList.unzip()

println("ListOne: $listOne")
println("ListTwo: $listTwo")
println("ListThree: $listThree")

/* Output:
    ListOne: [1, 1, 1]
    ListTwo: [s, u, p]
    ListThree: [3, 3, 3]
 */

Попробуйте онлайн!

0 голосов
/ 02 марта 2020

Как насчет этого?

val firstList = listOf(triple1, triple2).map {it.first }

val secondList = listOf(triple1, triple2).map { it.second }

val thirdList = listOf(triple1, triple2).map { it.third }

или

val result = listOf(triple1, triple2).map {
    Triple(it.first, it.second, it.third)    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...