我怎么能把两个数组合并成一个数组在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倍的时间。