arrayOf în Kotlin

Tablouri (Array) Kotlin 1.0

Creează un tablou (Array) cu dimensiune fixă din elementele date; intArrayOf creează un tablou de Int primitive.

Sintaxă
fun <T> arrayOf(vararg elemente: T): Array<T>
fun intArrayOf(vararg elemente: Int): IntArray

Ce face arrayOf

Un tablou (Array) are o dimensiune fixă, stabilită la creare: poți schimba elementele (a[i] = x), dar nu poți adăuga sau șterge. Tablourile sunt mai apropiate de memorie decât listele și sunt folosite mai ales pentru performanță sau când o funcție Java cere un tablou.

arrayOf(...) creează un Array<T>. Pentru numere există tablouri speciale, fără „cutii” pentru fiecare număr: intArrayOf → IntArray (și doubleArrayOf, longArrayOf, booleanArrayOf, charArrayOf). Pentru calcule cu multe numere, IntArray este mai rapid decât Array<Int>.

Atenție: println(tablou) afișează ceva de genul [I@1b6d3586, nu elementele. Pentru afișare folosește contentToString() sau joinToString().

Parametri

Parametru Descriere
elemente Valorile tabloului, în ordine. Numărul lor stabilește dimensiunea.

Ce returnează

Array<T> sau IntArray cu elementele date.

Exemple

Exemplul 1: Creare, citire și modificare

Putem schimba un element, dar nu putem adăuga altele. contentToString() afișează conținutul.

fun main() {
    val zile = arrayOf("luni", "marți", "miercuri")
    val temperaturi = intArrayOf(12, 15, 9)

    zile[2] = "joi"
    temperaturi[0] += 3

    println(zile.contentToString())
    println(temperaturi.contentToString())
    println("Dimensiune: ${zile.size}")
}

Rezultat

[luni, marți, joi]
[15, 15, 9]
Dimensiune: 3

Exemplul 2: IntArray și calcule

Un IntArray are aceleași funcții utile ca listele: sum, max, average, filter.

fun main() {
    val vanzari = intArrayOf(120, 340, 95, 410, 260)
    println("Total: ${vanzari.sum()} lei")
    println("Maxim: ${vanzari.max()} lei")
    println("Media: ${vanzari.average()} lei")
    println("Zile peste 200: ${vanzari.filter { it > 200 }}")
}

Rezultat

Total: 1225 lei
Maxim: 410 lei
Media: 245.0 lei
Zile peste 200: [340, 410, 260]

Exemplul 3: Tablou dat unei funcții cu vararg

Operatorul * (spread) desface un tablou în argumente separate pentru un parametru vararg.

fun salut(vararg nume: String) {
    for (n in nume) println("Salut, $n!")
}

fun main() {
    val invitati = arrayOf("Ana", "Radu")
    salut(*invitati)
    salut("Elena", *invitati)
}

Rezultat

Salut, Ana!
Salut, Radu!
Salut, Elena!
Salut, Ana!
Salut, Radu!

Greșeli frecvente

  • Afișezi un tablou cu println(tablou) și vezi [Ljava.lang.String;@.... Folosește tablou.contentToString().
  • Compari două tablouri cu ==: compară dacă este același tablou, nu conținutul. Folosește contentEquals.
  • Vrei să adaugi un element: tablourile au dimensiune fixă. Folosește o listă (mutableListOf) sau creează un tablou nou cu tablou + element.

Comenzi înrudite

  • arrayOfNulls: arrayOfNulls creează un tablou de dimensiunea dată plin cu null; emptyArray creează un tablou fără elemente.
  • Array.contentToString: contentToString afișează elementele tabloului ca text; contentEquals compară două tablouri element cu element.
  • Array.size: size spune câte elemente are tabloul; indices dă intervalul pozițiilor valide, de la 0 la size – 1.
  • listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.
  • Array.toList: Transformă un tablou într-o listă nouă, doar pentru citire, cu aceleași elemente.