我将从字节流读取数据。是Kotlin给予数组生成函数的索引(如https://kotlinlang.org/api/latest/jvm/stdlib/stdlib/kotlin/-aray/-aray/-ray/-init-.html(/em> 要按顺序调用,从零上升?
Array.kt
文件在builtins
下,所以我在哪里找到实际代码。
查看数组的源代码:
public inline constructor(size: Int, init: (Int) -> T)
init
参数是一个函数,该函数(特定项目的索引(期望Type T类型的返回值,该数组包含。
示例所示的其他答案是按顺序称为"自然"的方式。如果您不明白我的意思,请考虑实现替代方案:
for (i in 0..size) {
this.addToArray(init(i));
}
或者:
for (i in (size - 1)..0 {
this.addToArray(init(i));
}
与:
相比val indices = mutableListOf<Int>()
while (indices.size != size) {
val i = random.nextInt(size);
if (i !in indices) {
indices.add(i);
this.addToArray(init(i));
}
}
虽然我们看不到构造函数的源代码,但仅在其他答案中显示的示例表明他们不能使用随机方法。从数学上讲,从第一个答案中应用代码,使用随机并按顺序打印0-49的几率非常低。
此外,此处得到答案。由此产生的编译Java代码可创建一个从0到尺寸的前循环。对于JVM,假设他们不更改实现,则可以假定它将从0到大小。但是,无论它从0到大小还是从大小到0,如果您不喜欢订单,您总是可以将其倒转。
如果您需要100%确定它从0到大小,或者如果实现更改,则可以执行以下操作:
var a = (0 until 10).step(1).toList().toTypedArray()
在这种情况下,它产生一个数字0-9的数组。
如果要对象或以其他方式更改对象,则可以在列表创建之前添加.map {}
。话虽这么说,只要init
功能按照您的期望起作用,这就是过度杀伤的替代方法。
,您始终可以使用Intellij,Android Studio,其他一些IDE或您选择的分解器来确认代码。但是,无论实施如何,它们总是会以顺序结束 - 因此您不必担心这一点。他们唯一可以更改的唯一一件事是调用Init函数的顺序,但最终在结果数组中以相同的顺序结束。
确实如此。代码:
fun main() {
val x = Array(50) {println(it)}
}