对 ArrayList 中的元素进行组合 [Kotlin]

Dee*_*pan 5 kotlin

我有一个元素的 ArrayList,我需要它来获取对的组合。

例如。[A, B, C]将被转换为[[A, B], [A, C], [B, C]]

我目前使用正常的方式来实现这一目标

for(i in 0 until arr.size-1)
    for(j in i+1 until arr.size)
        //do stuff with arr[i], arr[j]
Run Code Online (Sandbox Code Playgroud)

如果我需要两个以上元素的组合,我可能会编写一个递归函数来执行相同的操作。我担心的是,这种方法仍然是老式的,并且可能不像函数式 Kotlin 那样

有没有更好的方法来实现这一点,并且还可以组合更多数量的元素,而无需进行递归?

Ily*_*lya 7

为了使其更加实用,您可以做的一件事是将配对生产与其消费脱钩。

配对生成器可以用以下函数编写sequence

fun <T> elementPairs(arr: List<T>): Sequence<Pair<T, T>> = sequence {
    for(i in 0 until arr.size-1)
        for(j in i+1 until arr.size)
            yield(arr[i] to arr[j])
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用该序列并以不同的方式处理这些对,例如

fun main() {
    elementPairs(listOf('A', 'B', 'C', 'D')).forEach {
        println(it)
    }

    elementPairs(listOf("apple", "desk", "arc", "density", "array"))
        .filter { (a, b) -> a.first() == b.first() }
        .forEach { println("Starting with the same letter: $it") }
}
Run Code Online (Sandbox Code Playgroud)

您可以在这里尝试: https: //pl.kotl.in/dJ9mAiATc