如何获得Kotlin中两个列表的所有元素的总和?

时间:2018-01-24 21:12:23

标签: kotlin

在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

不使用循环?

2 个答案:

答案 0 :(得分:11)

假设两个列表的大小相同

  1. 使用zip

    val sum = x.zip(y) { xv, yv -> xv + yv }
    
  2. 使用简单的mapmapIndexed

    val sum = (0 until x.size).map { x[it] + y[it] }
    // or
    val sum = x.mapIndexed { index, xv -> xv + y[index] }
    
  3. 的大小不同时,如果超出范围条目,则假设为0:

    1. 使用array

      val sum = IntArray(maxOf(x.size, y.size)) { 
          x.getOrElse(it, {0}) + y.getOrElse(it, {0}) 
      }.toList()
      
    2. 使用范围:

      val sum = (0 until maxOf(x.size, y.size)).map { 
          x.getOrElse(it, {0}) + y.getOrElse(it, {0})
      }
      
    3. 将列表扩展为相同的大小

      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少。