kotlin 如何合并两个二维数组

holgip5t  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(250)

我有两个Array类型的二维数组,但当我将其与plus方法结合时,会得到如下输出:

cells.plus(states.last().board.cells) —>

My output (cells here is my array of Array<Array<Char>>)
|     |
|  X  |
|     |
|X    |
|     |
|     |

如何正确合并?
例如我有:

val board3x3Array = arrayOf(
    arrayOf(' ', ' ', ' '),
    arrayOf(' ', 'X', ' '),
    arrayOf(' ', ' ', '0')
)

val board3x3Array2 = arrayOf(
    arrayOf('0', ' ', ' '),
    arrayOf(' ', ' ', ' '),
    arrayOf(' ', ' ', ' ')
)

And I need after merge:

val merged = arrayOf(
    arrayOf('0', ' ', ' '),
    arrayOf(' ', 'X', ' '),
    arrayOf(' ', ' ', '0')
)
06odsfpq

06odsfpq1#

假设条件:两个2D数组具有相同的维度,如果两个数组在坐标上都有非' '字符,则第一个数组优先。
我认为最简单的方法是使用Array构造函数来创建合并数组,同时迭代其中一个源数组的大小,如下所示。

val merged = Array(source1.size) { i ->
    CharArray(source1[i].size) { j ->
        if (source1[i][j] != ' ') source1[i][j] else source2[i][j]
    }
}
rvpgvaaj

rvpgvaaj2#

您可以使用以下代码来实现:

val mergedArray = board3x3Array2.mapIndexed { index, array ->
    array.mapIndexed { index2, c ->
        if (c == ' ') board3x3Array[index][index2] else c
    }.toTypedArray()
}.toTypedArray()

在这里,您只需检查单元格中board3x3Array2的值是否为空字符串' ',然后用board3x3Array的值替换该单元格

相关问题