Array.contentToString în Kotlin

Tablouri (Array) Kotlin 1.1

contentToString afișează elementele tabloului ca text; contentEquals compară două tablouri element cu element.

Sintaxă
fun <T> Array<out T>?.contentToString(): String
infix fun <T> Array<out T>?.contentEquals(alt: Array<out T>?): Boolean

Ce face Array.contentToString

Tablourile din Kotlin sunt tablouri Java, iar toString() lor dă doar tipul și o adresă ([I@6d06d69c). contentToString() întoarce conținutul, în forma [1, 2, 3], la fel cum arată o listă.

Tot din cauza moștenirii Java, a == b pe tablouri verifică dacă sunt același obiect. a contentEquals b verifică dacă au aceeași dimensiune și aceleași elemente în aceeași ordine.

Pentru tablouri de tablouri există contentDeepToString() și contentDeepEquals(), care intră și în tablourile interioare.

Parametri

Parametru Descriere
alt Tabloul cu care compari (pentru contentEquals).

Ce returnează

contentToString: un String. contentEquals: true dacă tablourile au același conținut.

Exemple

Exemplul 1: Afișare corectă a unui tablou

Prima linie arată ce face toString() (doar începutul, pentru că adresa diferă la fiecare rulare). A doua arată elementele.

fun main() {
    val note = intArrayOf(9, 7, 10)
    println(note.toString().take(3) + "...")
    println(note.contentToString())

    val tabla = arrayOf(intArrayOf(1, 0), intArrayOf(0, 1))
    println(tabla.contentDeepToString())
}

Rezultat

[I@...
[9, 7, 10]
[[1, 0], [0, 1]]

Exemplul 2: Același obiect față de același conținut

Cele două tablouri au aceleași valori, dar sunt obiecte diferite, așa că === (același obiect) dă false. Doar contentEquals compară valorile. Pe tablouri, == face același lucru ca ===; de aceea compilatorul avertizează când îl scrii.

fun main() {
    val raspunsuriCorecte = arrayOf("A", "C", "B", "D")
    val raspunsuriAna = arrayOf("A", "C", "B", "D")
    val raspunsuriIon = arrayOf("A", "B", "B", "D")

    println(raspunsuriCorecte === raspunsuriAna)
    println(raspunsuriCorecte contentEquals raspunsuriAna)
    println(raspunsuriCorecte contentEquals raspunsuriIon)
}

Rezultat

false
true
false

Greșeli frecvente

  • Compari tablouri cu == și primești false deși au aceleași valori (compilatorul dă și un avertisment). Folosește contentEquals sau transformă-le în liste.
  • Folosești contentToString() pe un tablou de tablouri și obții adrese pentru cele interioare. Folosește contentDeepToString().

Comenzi înrudite

  • arrayOf: Creează un tablou (Array) cu dimensiune fixă din elementele date; intArrayOf creează un tablou de Int primitive.
  • Array.toList: Transformă un tablou într-o listă nouă, doar pentru citire, cu aceleași elemente.
  • Iterable.joinToString: Lipește elementele într-un singur text, cu separatorul ales, prefix, sufix și, opțional, o transformare.