Študijné materiály

Zoznamy

Ďalším veľmi často používaným dátovým typom v Kotline je typ List. Z jazyka C++ sa veľmi podobá predovšetkým na vector alebo klasické pole.

List má podľa definície dynamickú veľkosť Kotlin ale nemá rád zmeny premenných (ako sme videli pri val a var) preto poznáme typy List a MutableList.

Tu sú všetky možnosti vytvorenia a niektoré možnosti použitia zoznamov:

fun main() {
    val zoznam1 : List<String> = listOf("Janko", "Jurko") // vymenovanie prvkov
    val zoznam2 : List<String> = emptyList()              // prazdny zoznam
    val zoznam3 : List<Int>    = List(10) { i -> i }      // konstruktor
    
    val zoznam4 : MutableList<String> = mutableListOf("Janko", "Jurko")
    val zoznam5 : MutableList<String> = mutableListOf()
    val zoznam6 : MutableList<Int>    = MutableList(10) { i -> i }
    
    println(zoznam1[1])   // Jurko
    zoznam1[0] = "Marek"  // chyba kompilacie
    zoznam1[2] = "Marek"  // chyba kompilacie
    
    println(zoznam4[1])   // Jurko
    zoznam4[0] = "Marek"  // OK zoznam4 = { "Marek", "Jurko" }
    zoznam4[2] = "Marek"  // out of bounds error
    zoznam4   += "Lukas"  // OK zoznam4 = { "Marek", "Jurko", "Lukas" }
    zoznam4.add(1, "Tom") // OK zoznam4 = { "Marek", "Tom", "Jurko", "Lukas" }
}

Úloha: Skús nájsť funkcie

  1. pre mazanie n-tej položky zo zoznamu
  2. pre zoradenie zoznamu
  3. pre zamiešanie zoznamu
  4. pre výber náhodnej položky zo zoznamu

Bonus: Zápis s konštruktorom takmer nepoužívame. Ale pre vysvetlenie

  • Konštruktor prijíma veľkosť poľa List(10) = pole bude mať 10 položiek
  • Konštruktor prijíma aj funkciu, čo sa má nastaviť ako hodnota pre i-tu položku { i ->
  • A zápis { i -> i } znamená že 0-tá položka bude mať hodnotu 0, prvá položka 1, druhá 2 atď.

Úlohy

1. Naruby

Zo štandardného vstupu načítaj 5 riadkov textu. Po ich načítaní ich vypíš v obrátenom poradí. Použi len jednu premennú.

Bonus: nad zoznamom existuje funkcia pre otočenie zoznamu. Skús ju nájsť a použiť