gpt4 book ai didi

arrays - Kotlin 和详细数组实例化

转载 作者:IT老高 更新时间:2023-10-28 13:46:30 26 4
gpt4 key购买 nike

假设我有经过 4 个顶点的路径。在进行快速原型(prototype)设计时,我会在 java 中将其定义为

double[][] path = {{1.0, 2.0}, {1.0,3.0}, {3.0,4.0}, {8.0,9.0}}

在 Kotlin 中使用 arrayOf 和 doubleArrayOf 函数将是相同的代码

val path = arrayOf(doubleArrayOf(1.0, 2.0), doubleArrayOf(1.0, 2.0), doubleArrayOf(1.0,3.0), doubleArrayOf(8.0,9.0))

感觉有点冗长。有没有 Kotlin 的方法来解决这个问题?

编辑: 用例是在“类似 REPL”的环境中回答关于数值数据的查询,例如 Matlab 或 SciPy。

最佳答案

就 stdlib 而言,这是尽可能短的。但是,您可以自己定义一个辅助函数:

fun doubles(vararg values: Pair<Double, Double>) = values
.map { doubleArrayOf(it.first, it.second) }
.toTypedArray()

用法:

fun main(args: Array<String>) {
val path = doubles(1.0 to 2.0, 1.0 to 3.0, 3.0 to 4.0, 8.0 to 9.0)
}

这不是最有效的解决方案,因为它涉及一个临时数组和列表的装箱和分配,但如果您只是进行原型(prototype)设计,这应该没问题。

编辑:

我还制作了一个可以添加任意长度数组的版本:

inline fun doubles(block: DoubleArrayBuilder.() -> Unit) = DoubleArrayBuilder()
.apply(block)
.list.toTypedArray()

class DoubleArrayBuilder {
val list = mutableListOf<DoubleArray>()

fun add(vararg doubles: Double) = list.add(doubles)
}

用法:

fun main(args: Array<String>) {
val path = doubles {
add(2.0, 3.0, 4.0)
add(2.0, 3.0, 4.0)
add(2.0, 3.0, 4.0)
}
}

关于arrays - Kotlin 和详细数组实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35841141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com