我想从两个数组中组成一个数组。
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
我如何结合它们?
答案 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)
在这种情况下,类型推断对您不利。 a1
和a2
被推断为不同类型的数组,因此无法将它们加在一起。您应该做的第一件事是使它们具有相同的类型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)