我想从两个数组中创建一个数组。
我尝试使用+:
var array1 = intArrayOf(1,2,3)
var array2 = intArrayOf(4,5,6)
var array3 = array1 + array2
但不幸的是它不起作用......我怎样才能将它们结合起来?
答案 0 :(得分:15)
实际上,您的确切代码适合我。在多个Kotlin版本上尝试过它。您可以在文档here及其来源here中找到用于此目的的operator fun IntArray.plus(elements: IntArray): IntArray
函数。
var array1 = intArrayOf(1, 2, 3) // 1, 2, 3
var array2 = intArrayOf(4, 5, 6) // 4, 5 ,6
var array3 = array1 + array2 // 1, 2, 3, 4, 5, 6
你是否想要做一些不同的事情,比如逐个添加元素并创建一个长度为3的新数组?你可以这样做:
val array4 = array1.zip(array2, Int::plus).toTypedArray() // 5, 7, 9
只有在您确实需要数组时才需要额外的toTypedArray
调用,否则您可以使用zip
函数返回的List<Int>
。
答案 1 :(得分:9)
使用点差运算符:
var array3 = intArrayOf(*array1, *array2)
当您需要在数组之间添加一些自定义元素时,这可能特别有用,例如intArrayOf(7, *array1, 8, 9, *array2, 10, 11)
。
注意传播比plus
更有效,因为它只创建一个结果数组。使用上述扩展示例的等效加号版本,我们可以节省5倍的空间并节省5倍的时间。
答案 2 :(得分:0)
我正在添加一些其他方法来合并两个数组。
var array1 = intArrayOf(1, 2, 3)
var array2 = intArrayOf(4, 5, 6)
方式1:
var array3 = array1 + array2
print(array3.asList())
它将打印[1, 2, 3, 4, 5, 6]
。上面给出了这个。
您可以使用+
方法替换plus()
。
var array3 = array1.plus(array2)
print(array3.asList())
它也会起作用。当您使用+
时,它实际上会调用plus()
方法。
方式2:
var array3 = array1.union(array2.asList())
print(array3)
它会打印[1, 2, 3, 4, 5, 6]
。
union()
方法可以将集合作为参数。它可以合并两个数组但返回 Set 。因此,我们将拥有唯一的数据,但它将合并两个数组。
方式3:
var mergedArraySize = array1.size + array2.size
var mergedArray = IntArray(mergedArraySize)
var pos = 0;
for (value in array1) {
mergedArray[pos] = value
pos++
}
for (value in array2) {
mergedArray[pos] = value
pos++
}
print(mergedArray.asList())
它还会打印[1, 2, 3, 4, 5, 6]
。