gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:25:57 25 4
gpt4 key购买 nike

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

这没问题:

lateinit var v:Array<Int>

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

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

var v2:Array<Int> = Array<Int>(2){5}

在这种情况下,向量的所有元素都等于 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])

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

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

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!

是否无法将大小放入数组类型规范中,或者我遗漏了某些内容?

最佳答案

对于原始类型:

这就是你的做法。您可以使用 IntArray

的构造函数,而不是使用 intArrayOf(args...) 之类的 kotlin 内置函数

这是示例:

// 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 }

引用类型:

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

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

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

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

关于arrays - Kotlin 中的数组声明大小是否可以仅通过初始化来实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56811744/

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