【问题标题】:Initializing Array from input stream in Kotlin从 Kotlin 中的输入流初始化数组
【发布时间】:2019-05-17 19:57:37
【问题描述】:

我想将输入流中的下一个 n 整数读入 IntArray。

我在下面编写了代码,但正如我们在 Order of init calls in Kotlin Array initialization 无法保证初始化会从索引 0 开始,并一一进行。

是否有一些类似的优雅解决方案不是基于这种可能错误的(但正如在所有已知实现中的另一个线程中讨论的那样)假设?

fun Scanner.readIntArray(n: Int): IntArray {
    return IntArray(n){nextInt()}
}

【问题讨论】:

    标签: arrays kotlin io init


    【解决方案1】:

    您始终可以自己迭代索引以保证您想要的行为。

    fun Scanner.readIntArray(n: Int) = IntArray(n).apply {
        for (i in 0 until size) {
            this[i] = nextInt()
        }
    }
    

    【讨论】:

      【解决方案2】:

      从 1.3.50 版开始,API 文档中保证数组元素按顺序初始化。因此,您可以使用问题中的原始代码以这种方式填充IntArray

      https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int-array/-init-.html

      【讨论】:

        【解决方案3】:

        你可以return (1..n).map { nextInt() }.toIntArray()

        【讨论】:

        • 请注意,这会导致创建一个临时的List<Int>(这涉及到装箱)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        • 2021-07-08
        相关资源
        最近更新 更多