Соедините элементы в списке друг с другом в Kotlin - PullRequest
0 голосов
/ 13 января 2020

Я хочу соединить элементы в списке друг с другом

Пример

list("A","B","C") to -> list(Pair(A,B),Pair(A,C),Pair(B,C))

list("A","B","C","D") to -> list(Pair(A,B),Pair(A,C),Pair(A,D),Pair(B,C),Pair(B,D),Pair(C,D))

Я пытался использовать zipWithNext, но это не помогает моей причине. Если кто-нибудь может показать мне, как я могу этого достичь?

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Вы можете просто вложить for петли и использовать для этого диапазоны:

fun permute(list: List<String>): List<Pair<String, String>> {
    var result: MutableList<Pair<String, String>> = mutableListOf()

    for (i in 0..(list.size - 1)) {
        val s = list.get(i)

        for (j in (i + 1)..(list.size - 1)) {
            val p = Pair(s, list.get(j))
            result.add(p)
        }
    }

    return result
}

Могут быть способы, которые больше Kotlin стиль , но я не знаю один на данный момент ...

Использование этого метода в fun main(), подобном этому

fun main() {
    val list = listOf("A", "B", "C", "D")

    println(permute(list))
}

приведет к выводу

[(A, B), (A, C), (A, D), (B, C), (B, D), (C, D)]
1 голос
/ 13 января 2020

kotlin способ)

var a = listOf("A", "B", "C", "D")

var pairs = a.mapIndexed { index, s ->
        a.slice(index + 1 until a.size).map { Pair(s, it)}
}.flatten()


print(pairs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...