List.indices în Kotlin

indices este intervalul pozițiilor valide ale listei (0..size-1); lastIndex este poziția ultimului element.

Sintaxă
val Collection<*>.indices: IntRange
val <T> List<T>.lastIndex: Int

Ce face List.indices

lista.indices întoarce intervalul 0..size - 1. Se folosește în bucle (for (i in lista.indices)) și pentru verificări (i in lista.indices). Pentru o listă goală, intervalul este gol, deci bucla nu se execută.

lastIndex este size - 1: poziția ultimului element. Pentru o listă goală este -1. Este util în comparații de felul „este ultimul element?” sau în parcurgeri de la coadă: for (i in lista.lastIndex downTo 0).

Ce returnează

indices: IntRange. lastIndex: Int.

Exemple

Exemplul 1: Separator doar între elemente

Nu punem săgeată după ultimul oraș: comparăm poziția cu lastIndex.

fun main() {
    val opriri = listOf("Iași", "Vaslui", "Bârlad", "Tecuci")
    println("indices = ${opriri.indices}, lastIndex = ${opriri.lastIndex}")
    for (i in opriri.indices) {
        print(opriri[i])
        if (i != opriri.lastIndex) print(" -> ")
    }
    println()
}

Rezultat

indices = 0..3, lastIndex = 3
Iași -> Vaslui -> Bârlad -> Tecuci

Exemplul 2: Parcurgere de la coadă și comparare cu vecinul

Parcurgem invers cu downTo, apoi comparăm fiecare zi cu cea de dinainte.

fun main() {
    val curs = listOf(4.97, 4.98, 4.96, 4.99)
    for (i in curs.lastIndex downTo 0) print("${curs[i]} ")
    println()
    for (i in curs.indices) {
        if (i == 0) continue
        val dif = if (curs[i] > curs[i - 1]) "crește" else "scade"
        println("Ziua ${i + 1}: $dif")
    }
    println(emptyList<Int>().lastIndex)
}

Rezultat

4.99 4.96 4.98 4.97 
Ziua 2: crește
Ziua 3: scade
Ziua 4: crește
-1

Greșeli frecvente

  • Scrii for (i in 0..lista.size): ultima valoare (size) nu este o poziție validă. Folosește indices.

Comenzi înrudite

  • Array.size: size spune câte elemente are tabloul; indices dă intervalul pozițiilor valide, de la 0 la size – 1.
  • Iterable.withIndex: Pune lângă fiecare element poziția lui, ca perechi (index, valoare), utile în bucle for.
  • List.getOrNull: Citește elementul de la o poziție fără risc: getOrNull dă null, getOrElse o valoare implicită când poziția nu există.
  • Iterable.first: first/last întorc primul sau ultimul element (sau primul care îndeplinește o condiție); variantele OrNull dau null în loc de excepție.