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 = acopiază tabloul. Ambele nume arată același tablou; foloseștea.copyOf(). - Uiți că
copyOf(n)peArray<String>dăArray<String?>și compilatorul cere verificări denull.
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.