从Kotlin中的输入流初始化数组

时间:2019-05-17 19:57:38

标签: arrays kotlin io init

我想从输入流中读取下一个n整数到IntArray中。

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

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

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

3 个答案:

答案 0 :(得分:2)

您总是可以自己遍历索引,以保证所需的行为。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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