如何在Kotlin中将两个阵列组合成一个阵列?

时间:2018-01-23 06:39:59

标签: kotlin

我想从两个数组中创建一个数组。

我尝试使用+:

var array1 = intArrayOf(1,2,3)
var array2 = intArrayOf(4,5,6)
var array3 = array1 + array2

但不幸的是它不起作用......我怎样才能将它们结合起来?

3 个答案:

答案 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]