我想从输入流中读取下一个n整数到IntArray中。
我写了下面的代码,但是正如我们在 Order of init calls in Kotlin Array initialization 无法保证初始化将从索引0开始并一一进行。
是否有一些类似的优雅解决方案,它不是基于这种可能错误的假设(而是在所有已知实现中的另一线程中讨论的假设)?
fun Scanner.readIntArray(n: Int): IntArray {
return IntArray(n){nextInt()}
}
答案 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()
。