Как создать в котлине пустой массив?


93

В Array(0, {i -> ""})настоящее время я использую , и я хотел бы знать, есть ли лучшая реализация, такая какArray()

плюс, если я использую arrayOfNulls<String>(0) as Array<String>, компилятор предупредит меня, что это приведение не может быть успешным. Но внутри это реализация по умолчанию Array(0, {i -> ""}). Я что-то упускаю?


stackoverflow.com/questions/33583235/… - один из комментариев предполагает, что предупреждение является ошибкой
Дункан МакГрегор

Ответы:


128

В конце (июнь 2015 г.) существует стандартная библиотечная функция Kotlin.

public fun <T> arrayOf(vararg t: T): Array<T>

Итак, чтобы создать пустой массив строк, вы можете написать

val emptyStringArray = arrayOf<String>()

2
А как насчет типизированных массивов вроде IntArray? Прямо сейчас использую arrayOf<Int>().toIntArray(), есть ли способ лучше?
csharpfolk

5
какова цель этих методов? потому что мы не можем назначить размер, поэтому не можем присвоить значение или получить. array [0] выбросить java.lang.ArrayIndexOutOfBoundsException:исключение.
Асиф Муштак

а что если тип Tвместо String?
Ари

1
@csharpfolk, вы можете использовать intArrayOf () для инициализации пустого IntArray
Cremons

Как добавить элемент в массив строк в котлине?
Сайед Хамза Хассан

42

Для справки тоже есть emptyArray. Например,

var arr = emptyArray<String>()

Увидеть


1
arr [0] throw, java.lang.ArrayIndexOutOfBoundsException:как мы можем его использовать?
Асиф Муштак

8
Это пустой массив, вы не можете ничего добавить / прочитать в него / из него. Это может показаться бесполезным, но иногда вам нужно куда-то передать массив, и это позволяет легко построить пустой массив.
Куба

1
это лучше, чем ответ Martian Odyssey, потому что при использовании в классе данных для инициализации массива arrayOf вызывает исключение java.util.concurrent.ExecutionException, а emptyArray () - нет.
iSWORD

1
Его неизменная длина 0! Так что это полезно только для очень специальных целей, когда вы не хотите хранить какие-либо данные (просто хотите тип ). Используйте Array(length){""}для включения желаемого length. Подробности см. В моем ответе ниже.
Мир-Исмаили

14

Пустой или null ? Вот в чем вопрос!

Чтобы создать массив nulls, просто используйтеarrayOfNulls<Type>(length) .


Но чтобы сгенерировать пустой массив размеромlength , используйте:

val arr = Array(length) { emptyObject }

Обратите внимание, что вы должныemptyObject правильно определить для каждого типа данных (потому что вы не хотите nulls). E. g. для Strings, emptyObjectможет быть "". Так:

val arr = Array(3) { "" }  // is equivalent for: arrayOf("","","")

Вот это живой пример . Обратите внимание, что по умолчанию программа запускается с двумя примерами аргументов.


9

нулевой массив

var arrayString=Array<String?>(5){null}
var nullArray= arrayOfNulls<String>(5)

1
Это массив нулей, а не пустых строк, как это было сказано.
polkovnikov.ph

2

Использование:

@JvmField val EMPTY_STRING_ARRAY = arrayOfNulls<String>(0)

Он возвращает массив строк размера 0, инициализированный нулевыми значениями.

1. Неправильно:

@JvmField val EMPTY_STRING_ARRAY = emptyArray<String>()

Он возвращается arrayOfNulls<String>(0)

2. Неправильно:

 @JvmField val EMPTY_STRING_ARRAY = arrayOf<String>()

Он возвращает массив, содержащий строки.


2

Как упоминалось выше, вы можете использовать IntArray(size)или FloatArray(size).


1

Я нашел два способа создать пустой массив, второй способ без лямбды:

var arr = Array (0, { i -> "" })
var arr2 = array<String>()

Что касается нулевых строк Kotlin, это запрещено. Вам нужно использовать String? type, чтобы строки могли быть нулевыми.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.