Kotlin 中的数组声明大小是否可以仅通过初始化来实现?

Pau*_*aum 4 arrays kotlin

我没有找到如何在Kotlin中声明具有预定义大小的数组而不对其进行初始化。

还行吧:

lateinit var v:Array<Int>
Run Code Online (Sandbox Code Playgroud)

但我猜想不能在数组类型中指定大小。

如果需要指定尺寸。必须做的事:

var v2:Array<Int> = Array<Int>(2){5}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,向量的所有元素都等于 5

下面是一个包含类和数组的示例:

data class But(
    val fufo: Int=0,
    val tp: Int = 1 
)  
typealias  ArBut = Array<But>
data class CArray (
   var arrayC: ArBut = ArBut(2){But()}
)    
val a =   CArray(arrayOf(But(2,2),But(5,4),But(3,3)))
println(a.arrayC[2])
Run Code Online (Sandbox Code Playgroud)

有用!有趣的是,初始化不是类型的一部分,您可以将任意大小的数组放入类中,而无需进行边界检查。如果尺寸是类型规格的一部分,情况会有所不同。

现在是一个例子,使用矩阵。请注意,语法有点复杂。

data class CMatr (
   val matrC: Array<ArBut>  = Array<ArBut>(2){ArBut(0){But()}}
)    
 val m =   CMatr(arrayOf( arrayOf(But(2,2),But(5,4)),   
         arrayOf(But(-2,2),But(3,4)), arrayOf(But(1,1),But(5,3))  ))
 println(m.matrC[2][1])  // Also works! 
Run Code Online (Sandbox Code Playgroud)

是否不可能将大小放入数组类型规范中,或者我遗漏了一些东西?

A.e*_*deh 5

对于原始类型:

这就是你的做法。而不是像使用构造函数那样intArrayOf(args...)使用kotlin 内置函数IntArray

这是例子:

// Array of integers of a size of N
val arr = IntArray(N)

// Array of integers of a size of N initialized with a default value of 2
val arr = IntArray(N) { 2 }
Run Code Online (Sandbox Code Playgroud)

对于参考类型:

对于引用类型对象,你可以这样做

val cars: Array<Car?> = arrayOfNulls(N) 
//returns an array of nullable Car objects with null values and size of N
Run Code Online (Sandbox Code Playgroud)

如果你想要一个非空对象的数组,你需要在创建数组时初始化它们

val cars: Array<Car> = Array<Car>(5){ Car() } 
//returns an array of non nullable car objects that has been initialized 
//with the method you provided in this case Car constructor with size of N
Run Code Online (Sandbox Code Playgroud)

  • @PauloBuchsbaum 对于参考数组,请使用类似 `val arr = Array(N) { "" }` 或 `val arr = Array&lt;String?&gt;(N) { null }` 的内容 (2认同)