¿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[]?


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


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()

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, { _ -> "" })

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[].


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>.


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.


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


0

también puedes usar:

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

por ejemplo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.