Инициализация массива из входного потока в Kotlin - PullRequest
1 голос
/ 17 мая 2019

Я хотел бы прочитать следующее n целое число из входного потока в IntArray.

Я написал код ниже, но, как мы обсуждали в Порядок вызовов init в инициализации Kotlin Array нет никакой гарантии, что инициализация будет начинаться с индекса 0 и будет идти один за другим.

Существует ли какое-то столь же элегантное решение для этого, которое не основано на этом, возможно, ложном (но, как обсуждалось в другом потоке во всехизвестные реализации верны) предположение?

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

Ответы [ 2 ]

3 голосов
/ 17 мая 2019

Вы всегда можете сами пройтись по индексам, чтобы гарантировать желаемое поведение.

fun Scanner.readIntArray(n: Int) = IntArray(n).apply {
    for (i in 0 until size) {
        this[i] = nextInt()
    }
}
0 голосов
/ 17 мая 2019

Вы могли бы сделать return (1..n).map { nextInt() }.toIntArray().

...