объединить каждые два равных элемента в другой - PullRequest
0 голосов
/ 22 декабря 2018

Как объединить каждые два равных элемента в списке в один элемент, и процесс объединения определяется лямбда-функцией.

Например, если у меня есть такой список

["a"," a "," b "," b "]

И процесс слияния {it.repeat(2)}

должен быть таким:

[" aa ", "bb"]

но если список такой:

["a", "a", "a"]

Он должен быть преобразован в

["aa", "a"]

Другой пример:

["a", "b", "a", "b"]

будет

["a", "b", "a", "b"]

Я пытался zipWithNext(), но я не могу понять, что делать дальшеособенно когда есть более двух повторений одной и той же буквы.

Как реализовать это в Kotlin, используя функциональное программирование способ Kotlin.

1 Ответ

0 голосов
/ 23 декабря 2018

Вот вам и самое неэффективное но желаемое решение.Как я и просил, я использовал functional programming как можно больше.Надеюсь, вам понравится.Но было бы очень легко, если бы вы использовали loop или regular expression для решения этой проблемы.В этом вопросе функциональный стиль не нужен.

fun main(args: Array<String>) {
    val list = listOf("a", "a", "a", "a", "b", "b", "b", "b")
    //val list = listOf("a", "a", "a", "b", "a")
    var temp = false
    val result = list.zipWithNext().map {
        if (temp) {
            temp = false
            null
        } else {
            if (it.first == it.second) {
                temp = true
                it.first + it.second
            } else {
                it.first
            }
        }
    }.filter { !it.isNullOrBlank() }.toMutableList()
    if (!temp) {
        result.add(list.last())
    }

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