Как я могу объединить два массива с массивами аргументов в один массив в Котлине? - PullRequest
0 голосов
/ 17 января 2019

Я хочу сделать один массив из двух массивов.

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

Как я могу их объединить?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Тип вывода типа работает против вас в этом случае. a1 и a2 предполагаются как массивы разных типов, поэтому вы не можете добавить их вместе. Первое, что вы должны сделать, это сделать их одного типа Array<Any>:

var a1: Array<Any> = arrayOf(1, 2, 3)
var a2: Array<Any> = arrayOf(4, arrayOf(5,6), 7)

Затем вы увидите неоднозначную ошибку вызова метода с двумя перегрузками plus. Перегрузки отличаются только по имени параметра. Мы хотим использовать один с параметром elements, который добавляет все элементы из другого массива:

var a3 = a1.plus(elements = a2)
0 голосов
/ 17 января 2019

Этот пример действительно должен работать для вас.

Пример 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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...