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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Эта версия скомпилирована для базового цикла и 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;
}

Ответ 3

val result = "[1, 2, 3, 4, 5]".removeSurrounding("[","]").replace(" ","").split(",").map { it.toInt() }

Ответ 4

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

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

Кроме того, если вы используете расширения:

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

strings.asInts()