在 Kotlin 中如何复制一个二维数组?

13

这种方法很好用。但是我认为它并不实用。

fun getCopy(array: Array<BooleanArray>): Array<BooleanArray> {
    val copy = Array(array.size) { BooleanArray(array[0].size) { false } }
    for (i in array.indices) {
        for (j in array[i].indices) {
            copy[i][j] = array[i][j]
        }
    }
    return copy
}

有更加功能的方法吗?

2个回答

17

您可以这样使用clone

fun Array<BooleanArray>.copy() = map { it.clone() }.toTypedArray()

或者如果您想要节省一些分配:

fun Array<BooleanArray>.copy() = arrayOfNulls<ByteArray>(size).let { copy ->
    forEachIndexed { i, bytes -> copy[i] = bytes.clone() }
    copy
} as Array<BooleanArray>

正如@hotkey所建议的那样,甚至可以更加简洁:

fun Array<BooleanArray>.copy() = Array(size) { get(it).clone() }

8
另一种内存分配更有效的实现方法:fun Array<BooleanArray>.copy() = Array(size) { get(it).clone() },意思是对于一个Boolean类型的二维数组,可以使用此方法进行复制。 - hotkey

-1

使用 copyOf() 怎么样?

val copyOfArray = array.copyOf()

返回一个新的数组,该数组是原始数组的副本。
参考 这里

7
问题中的示例代码表明需要进行深拷贝,而该代码创建的是浅拷贝。 - hoijui
1
这会保留内部数组的引用。 - Moaz Rashad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接