在 Kotlin 中,声明指定大小的二维 Int
数组是否有最简单的方法?
val board = Array(n, { IntArray(n) })
这里是创建二维数组的新顶级函数的源代码。当 Kotlin 缺少某些功能时,可以进行扩展。然后添加 YouTrack 问题 来建议并跟踪状态。虽然在这种情况下它们与上面的代码长度差不多,但提供了更明显的命名方式来说明正在发生的事情。
public inline fun <reified INNER> array2d(sizeOuter: Int, sizeInner: Int, noinline innerInit: (Int)->INNER): Array<Array<INNER>>
= Array(sizeOuter) { Array<INNER>(sizeInner, innerInit) }
public fun array2dOfInt(sizeOuter: Int, sizeInner: Int): Array<IntArray>
= Array(sizeOuter) { IntArray(sizeInner) }
public fun array2dOfLong(sizeOuter: Int, sizeInner: Int): Array<LongArray>
= Array(sizeOuter) { LongArray(sizeInner) }
public fun array2dOfByte(sizeOuter: Int, sizeInner: Int): Array<ByteArray>
= Array(sizeOuter) { ByteArray(sizeInner) }
public fun array2dOfChar(sizeOuter: Int, sizeInner: Int): Array<CharArray>
= Array(sizeOuter) { CharArray(sizeInner) }
public fun array2dOfBoolean(sizeOuter: Int, sizeInner: Int): Array<BooleanArray>
= Array(sizeOuter) { BooleanArray(sizeInner) }
使用方法:
public fun foo() {
val someArray = array2d<String?>(100, 10) { null }
val intArray = array2dOfInt(100, 200)
}
Array(Array<Something>)
,但我收到了 java.lang.ClassCastException: [[Ljava.lang.Object; cannot be cast to [[Something;
异常。此外,在我看来,更好的签名可能是 array2d(sizeOuter: Int, sizeInner: Int, init: (Int, Int)->INNER)
。我会提出一个问题来了解你的函数定义有什么问题。 - Michele d'Amico目前这是最简单的方法,我们稍后将使用适当的函数扩展标准库。
是的,您提供的代码是声明二维数组最简单的方法。
下面,我给您提供一个二维数组初始化和打印的示例。
fun main(args : Array<String>) {
var num = 100
// Array Initialization
var twoDArray = Array(4, {IntArray(3)})
for(i in 0..twoDArray.size - 1) {
var rowArray = IntArray(3)
for(j in 0..rowArray.size - 1) {
rowArray[j] = num++
}
twoDArray[i] = rowArray
}
// Array Value Printing
for(row in twoDArray) {
for(j in row) {
print(j)
print(" ")
}
println("")
}
}
var rowArray = IntArray(3)
。因为 Array(...)
的第二个参数会初始化每个数组元素。所以你可以这样做:val rowArray = twoDArray[i]
。 - androidguy