¿Cuál es el equivalente de Kotlin de la cadena de Java []?

164

Veo que Kotlin tiene ByteArray, ShortArray, IntArray, CharArray, DoubleArray, FloatArray , que son equivalentes a byte[], short[], int[],char[], double[], float[]en Java.

Ahora me pregunto, ¿hay algún StringArrayequivalente al de Java String[]?

chancyWu
fuente
77
typealias StringArray = Array<String>;)
marstran

Respuestas:

225

No hay caso especial para el String, porque Stringes un tipo de referencia ordinaria en la JVM, en contraste con las primitivas de Java ( int, double, ...) - almacenándolos en una referencia Array<T>requiere el boxeo en objetos como IntegeryDouble . El propósito de las matrices especializadas como IntArrayen Kotlin es almacenar primitivas no encajonadas, deshacerse de los gastos generales de boxeo y desempaquetado (lo mismo que Java en int[]lugar de Integer[]).

Puede usar Array<String>(y Array<String?>para nulables), que es equivalente a String[]en Java:

val stringsOrNulls = arrayOfNulls<String>(10) // returns Array<String?>
val someStrings = Array<String>(5) { "it = $it" }
val otherStrings = arrayOf("a", "b", "c")

Ver también: matrices en la referencia del idioma

tecla de acceso directo
fuente
18

use arrayOf , arrayOfNulls , emptyArray

var colors_1: Array<String> = arrayOf("green", "red", "blue")
var colors_2: Array<String?> = arrayOfNulls(3)
var colors_3: Array<String> = emptyArray()
Dan Alboteanu
fuente
16

Para crear un vacío Array of Strings en Kotlin, debe usar uno de los siguientes seis enfoques:

Primer enfoque:

val empty = arrayOf<String>()

Segundo enfoque:

val empty = arrayOf("","","")

Tercer enfoque:

val empty = Array<String?>(3) { null }

Cuarto enfoque:

val empty = arrayOfNulls<String>(3)

Quinto enfoque:

val empty = Array<String>(3) { "it = $it" }

Sexto enfoque:

val empty = Array<String>(0, { _ -> "" })
Andy Fedoroff
fuente
9

Esos tipos están ahí para que pueda crear matrices de las primitivas, y no los tipos en caja. Como String no es un primitivo en Java, solo puede usarlo Array<String>en Kotlin como el equivalente de un Java String[].

zsmb13
fuente
5

Para Stringsy otros tipos, solo usa Array<*>. La razón IntArrayy otras existen es para evitar el autoboxing.

Entonces se int[]relaciona con IntArraydonde se Integer[]relaciona Array<Int>.

nhaarman
fuente
1

Algunas de las formas comunes de crear una matriz de cadenas son

  1. var arr = Matriz (5) {""}

Esto creará una matriz de 5 cadenas con valores iniciales para ser una cadena vacía.

  1. var arr = arrayOfNulls <String?>(5)

Esto creará una matriz de tamaño 5 con valores iniciales que serán nulos. Puede usar datos de cadena para modificar la matriz.

  1. var arr = arrayOf ("cero", "uno", "dos", "tres")

Cuando ya conozca el contenido de la matriz, puede inicializar la matriz directamente.

  1. También hay una manera fácil de crear una matriz multidimensional de cadenas.

    matriz var = matriz (5) {matriz (6) {""}}

    Así es como puede crear una matriz con 5 filas y 6 columnas con valores iniciales de cadena vacía.

Himanshu Garg
fuente
0

Este ejemplo funciona perfectamente en Android

En kotlin puedes usar una expresión lambda para esto. La definición de Kotlin Array Constructor es:

Array(size: Int, init: (Int) -> T)

Lo que evalúa a:

skillsSummaryDetailLinesArray = Array(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

O:

skillsSummaryDetailLinesArray = Array<String>(linesLen) {
        i: Int -> skillsSummaryDetailLines!!.getString(i)
}

En este ejemplo, la definición del campo fue:

private var skillsSummaryDetailLinesArray: Array<String>? = null

Espero que esto ayude

usuario2288580
fuente
0

también puedes usar:

val frases = arrayOf("texto01","texto02 ","anotherText","and ")

por ejemplo.

João Arthur
fuente