Котлин - Конкатенация значений многомерных массивов - PullRequest
0 голосов
/ 17 мая 2019

У меня вопрос о многомерных массивах в Котлине. Как получить следующий результат в общем виде:

val array1 = arrayOf(
                arrayOf(1, 2, 3, 4),
                arrayOf(5, 6, 7, 8),
                arrayOf(9, 10, 11, 12)
             )

val array2 = arrayOf(
                arrayOf(11, 12, 13, 14),
                arrayOf(15, 16, 17, 18),
                arrayOf(19, 20, 21, 22)
             )

val array3 = arrayOf(
                arrayOf(21, 22, 23, 24),
                arrayOf(25, 26, 27, 28),
                arrayOf(29, 30, 31, 32)
             )

Результат путем объединения значений (в столбце и строке) массивов1, массив2, массив3 в массив одинакового размера:

result[0][0] = [array1[0][0], array2[0][0], array3[0][0]]
result[0][1] = [array1[0][1], array2[0][1], array3[0][1]]
result[2][0] = [array1[2][0], array2[2][0], array3[2][0]]

....

result = [
    [1, 11, 21], [2, 12, 22], [3, 13, 23], [4, 14, 24],
    [5, 15, 25], [6, 16, 26], [7, 17, 27], [8, 18, 28],
    [9, 19, 29], [10, 20, 30], [11, 21, 31], [12, 22, 32]
]

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Вы можете сделать это.Обратите внимание, что это предполагает, что все массивы и подмассивы имеют одинаковый размер.

val array1 = arrayOf(
        arrayOf(1, 2, 3, 4),
        arrayOf(5, 6, 7, 8),
        arrayOf(9, 10, 11, 12)
)

val array2 = arrayOf(
        arrayOf(11, 12, 13, 14),
        arrayOf(15, 16, 17, 18),
        arrayOf(19, 20, 21, 22)
)

val array3 = arrayOf(
        arrayOf(21, 22, 23, 24),
        arrayOf(25, 26, 27, 28),
        arrayOf(29, 30, 31, 32)
)
val arrays = arrayOf(array1, array2, array3)

val arrayLength = array1.size
val subArrayLength = array1[0].size 
val result = Array(arrayLength * subArrayLength) { index ->
    arrays.map{ it[index / subArrayLength][index % subArrayLength] }.toTypedArray()
}
0 голосов
/ 18 мая 2019

Вы можете использовать flatten()

val result = arrayOf(array1, array2, array3).flatten().toTypedArray()

Поскольку, flatten возвращает список, вы можете затем вызвать toTypedArray(), чтобы получить результат в виде массива.Это более идиоматический способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...