Array.copyOf în Kotlin

Tablouri (Array) Kotlin 1.0

Creează o copie a tabloului; cu o dimensiune nouă, taie elementele în plus sau completează cu null/0.

Sintaxă
fun <T> Array<T>.copyOf(): Array<T>
fun <T> Array<T>.copyOf(dimensiuneNoua: Int): Array<T?>
fun IntArray.copyOf(dimensiuneNoua: Int): IntArray

Ce face Array.copyOf

copyOf() creează un tablou nou cu aceleași elemente. Modificările făcute în copie nu afectează originalul (copia este „superficială”: obiectele din ea sunt aceleași, nu sunt copiate și ele).

Cu un argument, copyOf(n) creează un tablou de dimensiune n: dacă n este mai mic, ultimele elemente sunt tăiate; dacă este mai mare, pozițiile noi primesc null (la Array<T>, tipul devine Array<T?>) sau 0 (la IntArray).

Pentru o bucată din tablou există copyOfRange(deLa, panaLa), cu panaLa exclus.

Parametri

Parametru Descriere
dimensiuneNoua Opțional: dimensiunea copiei.

Ce returnează

Un tablou nou.

Exemple

Exemplul 1: Copie independentă

Schimbăm copia; originalul rămâne cum era. Cu val copie = original am fi avut același tablou sub două nume.

fun main() {
    val original = intArrayOf(5, 8, 13)
    val copie = original.copyOf()
    val acelasi = original

    copie[0] = 100
    acelasi[2] = 0

    println("original: ${original.contentToString()}")
    println("copie:    ${copie.contentToString()}")
}

Rezultat

original: [5, 8, 0]
copie:    [100, 8, 13]

Exemplul 2: Copie mai mică sau mai mare

La tabloul de texte pozițiile noi sunt null; la IntArray sunt 0. copyOfRange(1, 3) ia pozițiile 1 și 2.

fun main() {
    val echipa = arrayOf("Ana", "Bogdan", "Carmen", "Dan")
    println(echipa.copyOf(2).contentToString())
    println(echipa.copyOf(6).contentToString())
    println(echipa.copyOfRange(1, 3).contentToString())

    val scoruri = intArrayOf(10, 20)
    println(scoruri.copyOf(4).contentToString())
}

Rezultat

[Ana, Bogdan]
[Ana, Bogdan, Carmen, Dan, null, null]
[Bogdan, Carmen]
[10, 20, 0, 0]

Greșeli frecvente

  • Crezi că val b = a copiază tabloul. Ambele nume arată același tablou; folosește a.copyOf().
  • Uiți că copyOf(n) pe Array<String> dă Array<String?> și compilatorul cere verificări de null.

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.
  • Array.size: size spune câte elemente are tabloul; indices dă intervalul pozițiilor valide, de la 0 la size – 1.
  • List.slice: Întoarce o listă nouă cu elementele de la pozițiile date: un interval (2..4) sau o listă de indici.