如何在Kotlin中将带有参数Arrays的两个Array组合成一个Array?

时间:2019-01-17 07:12:20

标签: android arrays kotlin

我想从两个数组中组成一个数组。

var a1 = arrayOf(1, 2, 3)
var a2 = arrayOf(4, arrayOf(5,6), 7)

var a3 = a1 + a2

但是出现编译错误:

None of the following functions can be called with the arguments supplied:
public operator fun <T> Array<???>.plus(element: ???): Array<???> defined 
in kotlin.collections
public operator fun <T> Array<???>.plus(elements: Array<out ???>): 
Array<???> defined in kotlin.collections
public operator fun <T> Array<Int>.plus(elements: Collection<Int>): 
Array<Int> defined in kotlin.collections

我如何结合它们?

2 个答案:

答案 0 :(得分:0)

此示例实际上应为您工作。

示例1:

import java.util.Arrays

fun main(args: Array<String>) {
    val array1 = intArrayOf(1, 2, 3)
    val array2 = intArrayOf(4, 5, 6)

    val length = array1.size + array2.size

    val result = IntArray(length)
    var pos = 0
    for (element in array1) {
        result[pos] = element
        pos++
    }

    for (element in array2) {
        result[pos] = element
        pos++
    }

    println(Arrays.toString(result))
}

示例2:

arrayCopy方法

import java.util.Arrays

fun main(args: Array<String>) {
    val array1 = intArrayOf(1, 2, 3)
    val array2 = intArrayOf(4, 5, 6)

    val aLen = array1.size
    val bLen = array2.size
    val result = IntArray(aLen + bLen)

    System.arraycopy(array1, 0, result, 0, aLen)
    System.arraycopy(array2, 0, result, aLen, bLen)

    println(Arrays.toString(result))
}

答案 1 :(得分:0)

在这种情况下,类型推断对您不利。 a1a2被推断为不同类型的数组,因此无法将它们加在一起。您应该做的第一件事是使它们具有相同的类型Array<Any>

var a1: Array<Any> = arrayOf(1, 2, 3)
var a2: Array<Any> = arrayOf(4, arrayOf(5,6), 7)

然后,您将看到关于plus的2个重载的模棱两可的方法调用错误。重载仅在参数名称上有所不同。我们想使用带有elements参数的参数,该参数会添加另一个数组中的所有元素:

var a3 = a1.plus(elements = a2)