【问题标题】:How to copy a two-dimensional array in Kotlin?如何在 Kotlin 中复制二维数组?
【发布时间】:2016-11-07 10:52:31
【问题描述】:

这个方法很好用。但是,我认为它没有功能。

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
}

有没有更实用的方法?

【问题讨论】:

    标签: arrays kotlin


    【解决方案1】:

    你可以像这样使用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() }
    

    【讨论】:

    • 另一个高效分配的实现:fun Array&lt;BooleanArray&gt;.copy() = Array(size) { get(it).clone() }
    【解决方案2】:

    使用copyOf()怎么样?

    val copyOfArray = array.copyOf()
    

    返回新数组,它是原始数组的副本

    参考here

    【讨论】:

    • 问题中的示例代码表明需要深拷贝。这段代码创建了一个浅拷贝。
    • 这保留了内部数组的引用
    猜你喜欢
    • 2011-08-02
    • 2022-12-18
    • 2018-04-03
    • 1970-01-01
    • 2014-06-25
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多