List.slice în Kotlin

Întoarce o listă nouă cu elementele de la pozițiile date: un interval (2..4) sau o listă de indici.

Sintaxă
fun <T> List<T>.slice(indici: IntRange): List<T>
fun <T> List<T>.slice(indici: Iterable<Int>): List<T>

Ce face List.slice

slice(2..4) ia elementele de pe pozițiile 2, 3 și 4. Intervalul include ambele capete. Poți da și o listă de indici oarecare, de exemplu listOf(0, 2, 5), iar elementele vin în ordinea indicilor dați.

Rezultatul este o copie: modificările ulterioare ale listei originale nu se văd în el. Dacă un indice nu există, apare IndexOutOfBoundsException.

Pentru o „fereastră” care nu copiază elementele există subList, unde capătul de final este exclus.

Parametri

Parametru Descriere
indici Un IntRange (ambele capete incluse) sau orice colecție de poziții.

Ce returnează

O List<T> nouă cu elementele cerute.

Exemple

Exemplul 1: Zilele lucrătoare din mijlocul săptămânii

Pozițiile 1..3 înseamnă marți, miercuri și joi: ambele capete sunt incluse.

fun main() {
    val zile = listOf("luni", "marți", "miercuri", "joi", "vineri", "sâmbătă", "duminică")
    println(zile.slice(1..3))
    println(zile.slice(5..6))
}

Rezultat

[marți, miercuri, joi]
[sâmbătă, duminică]

Exemplul 2: Indici aleși și în altă ordine

Elementele vin în ordinea indicilor: întâi poziția 4, apoi 0, apoi 2. Ultima linie ia pozițiile pare cu un interval cu pas.

fun main() {
    val litere = listOf("a", "b", "c", "d", "e", "f")
    println(litere.slice(listOf(4, 0, 2)))
    println(litere.slice(0..litere.lastIndex step 2))
}

Rezultat

[e, a, c]
[a, c, e]

Greșeli frecvente

  • Crezi că slice(1..3) ia elementele 1 și 2: ia trei elemente, pentru că .. include capătul. Pentru capăt exclus folosește 1 until 3 sau 1..<3.

Comenzi înrudite

  • List.subList: Întoarce o vedere asupra unei porțiuni din listă, de la poziția deLa inclusiv până la panaLa exclusiv.
  • Iterable.take: take(n) întoarce primele n elemente, iar drop(n) întoarce tot ce rămâne după ce sari peste primele n.
  • List.indices: indices este intervalul pozițiilor valide ale listei (0..size-1); lastIndex este poziția ultimului element.
  • Array.copyOf: Creează o copie a tabloului; cu o dimensiune nouă, taie elementele în plus sau completează cu null/0.