Kotlin 数组<init>离子化



我将从字节流读取数据。是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)}
}

相关内容

  • 没有找到相关文章

最新更新