在Kotlin我有两个清单:
val x: List<Int> = listOf(1,2,3,4,5,6)
val y: List<Int> = listOf(2,3,4,5,6,7)
我如何获得:
val z: List<Int> = 3,5,7,9,11,13
不使用循环?
答案 0 :(得分:11)
假设两个列表的大小相同:
使用zip
val sum = x.zip(y) { xv, yv -> xv + yv }
使用简单的map
和mapIndexed
val sum = (0 until x.size).map { x[it] + y[it] }
// or
val sum = x.mapIndexed { index, xv -> xv + y[index] }
当的大小不同时,如果超出范围条目,则假设为0:
使用array
val sum = IntArray(maxOf(x.size, y.size)) {
x.getOrElse(it, {0}) + y.getOrElse(it, {0})
}.toList()
使用范围:
val sum = (0 until maxOf(x.size, y.size)).map {
x.getOrElse(it, {0}) + y.getOrElse(it, {0})
}
将列表扩展为相同的大小
val xExtended = x + Array(maxOf(0, y.size - x.size), { 0 })
val yExtended = y + Array(maxOf(0, x.size - y.size), { 0 })
val sum = xExtended.zip(yExtended) { xv, yv -> xv + yv }
答案 1 :(得分:2)
我会使用范围和map
:
val sums = (0 until x.size).map { x[it] + y[it] }
它的开销可能比zip
少。