Kotlin:迭代集合中的每一对(或通常固定大小的子集)

Mor*_*roß 6 iterator set subset kotlin pairwise

是否有一种简短/惯用的方法来迭代集合中的每对元素?

更好的是迭代集合的所有固定基数子集的方法。

经典而丑陋的方法是:

val s = setOf(1, 2, 3, 4)

for (i in s) {
    for (j in s) {
        if (i != j) {
            println("$i $j")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了拥有更大的子集,需要更多的循环,因此这是不可扩展的。

Neo*_*Neo 3

我认为您已经找到了最惯用的解决方法。如果你想让它更实用,你可以将其转换为:

s.map { i -> s.map { i to it } }
    .flatten()
    .filter { (left, right) -> left != right }
    .onEach { (i, j) -> println("$i $j") }
Run Code Online (Sandbox Code Playgroud)

  • `flatMap` 会比 `map{}/flatten()` 更好。 (3认同)