Как преобразовать массив строк в массив Int в Kotlin?

Котлин имеет много сокращений и интересных особенностей. Итак, мне интересно, есть ли быстрый и короткий способ преобразования массива строк в массив целых чисел. Похожий на этот код в Python:

results = [int(i) for i in results]

3 ответов


можно использовать .map { ... } С .toInt() или .toIntOrNull():

val result = strings.map { it.toInt() }

только результат не массив, а список. Предпочтительно использовать списки над массивами в коде, критичном для производительности, см. различия.

Если вам нужен массив, добавить .toTypedArray() или .toIntArray().


если вы пытаетесь преобразовать List структура, которая реализует RandomAccess (как ArrayList или Array), вы можете использовать эту версию для лучшей производительности:

IntArray(strings.size) { strings[it].toInt() }

эта версия скомпилирована в базовый цикл for и int[]:

int size = strings.size();
int[] result = new int[size];
int index = 0;

for(int newLength = result.length; index < newLength; ++index) {
    String numberRaw = strings.get(index);
    int parsedNumber = Integer.parseInt(numberRaw);
    result[index] = parsedNumber;
}

Я бы использовал что-то простое, как

val strings = arrayOf("1", "2", "3")
val ints = ints.map { it.toInt() }.toTypedArray()

альтернативно, если вы в расширениях:

fun Array<String>.asInts() = this.map { it.toInt() }.toTypedArray()

strings.asInts()