如何在 Kotlin 中并行迭代两个列表?

Kel*_*ook 6 list kotlin

如何在 Kotlin 中迭代两个列表?我想将一个列表中的每个值分配给另一个列表中的等效值textview,例如 1:1 分配。

类似下面的内容允许并行迭代,但它会被执行两次:

data class Total(val area : Double)

private fun assign(
    allArea: List<Double>, allTextViews : List<TextView>
) : Total {
    var totalArea = 0.0

    allArea.forEach { double ->
        val value : Double = double
        totalArea += value

        allTextViews.forEach { textView ->
            textView.text = value.toString()
        }
    }
    return Total(totalArea)
}

assign(allStates = listOf(
        a,
        b
    ),
    allTextViews = listOf(
        textView1,
        textView2)
)
Run Code Online (Sandbox Code Playgroud)

Pay*_*yam 11

这是最“函数式编程”的方式:

fun main() {
    val listA = listOf(10, 20, 30)
    val listB = listOf(1,2,3)
    listA.zip(listB) { a, b -> println(a + b) }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*nik 8

尝试压缩两个列表:

fun main() {
    val list1 = listOf(1,2,3)
    val list2 = listOf(4,5,6)
    list1.zip(list2).forEach {pair -> 
       println(pair.component1() + pair.component2())
    }
}
Run Code Online (Sandbox Code Playgroud)

这打印:

5
7
9
Run Code Online (Sandbox Code Playgroud)

在给定allArea列表并allTextViews具有相同长度的情况下,您可以压缩它们并获得第一个组件的类型为 type Double,第二个组件为 type 的对TextView

  • 它将更具可读性 `{ (a, b) -&gt; println(a + b) }` (3认同)
  • 这将起到相同的作用: `list1.zip(list2) {it1, it2-&gt; println(it1 + it2) }` 。如您所见,不需要 forEach。 (2认同)