我怎么能把两个数组合并成一个数组在Kotlin?

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

我试着用+:

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

但不幸的是不能工作…我怎样才能把它们结合起来?

其实,你的确切的代码适合我。 尝试了多个Kotlin版本。 你可以在这里findoperator fun IntArray.plus(elements: IntArray): IntArray函数,在这里的文档中使用了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

我正在添加其他方式来合并两个数组。

 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]

使用扩展运算符:

 var array3 = intArrayOf(*array1, *array2) 

当需要在数组之间添加一些自定义元素时,这可能特别有用,如intArrayOf(7, *array1, 8, 9, *array2, 10, 11)

注意传播效率要比plus up高得多,因为它只创建一个结果数组。 使用上面的传播示例的等效加版本可能使我们的空间增加5倍,并且花费5倍的时间。