Listid

C# programmeerimiskeeles on listid (List<T>) dünaamilised ja järjestatud kogumid, mis võimaldavad andmeid tõhusalt hallata ja organiseerida. Erinevalt massiividest, mille suurus on fikseeritud, saavad listid vajaduse korral automaatselt kasvada ja kahaneda.

Siin on põhjalik ülevaade listide omadustest ja kasutusest:

1. Omadused ja sisu

  • Tüüp (T): Listid kasutavad geneerilist tüüpi List<T>, mis tähendab, et list on tugevalt tüübitud. Kompilaator teab täpselt, mis tüüpi objekte list sisaldab, ning tõstab viga, kui proovitakse lisada valet tüüpi andmeid.
  • Järjestus: Listid säilitavad elementide lisamise järjekorra. Elementidele pääseb juurde nende indeksi kaudu, mis algab nullist.
  • Dünaamilisus: Listid kasvavad dünaamiliselt, kui neisse elemente lisatakse, näiteks kasutades meetodit .Add().

2. Peamised tegevused

  • Lisamine ja eemaldamine: Elemente saab listi lisada, sealt eemaldada ja neist otsida.
  • Sorteerimine ja manipuleerimine: Klass List<T> pakub arvukalt abimeetodeid andmete filtreerimiseks, teisendamiseks ja sorteerimiseks.
  • LINQ tugi: Listid toetavad täielikult LINQ päringuid, mis teeb andmete töötlemise lihtsamaks ja loetavamaks.

3. Levinud vead ja nende lahendused

  • IndexOutOfRangeException: Tekib siis, kui proovitakse pöörduda indeksi poole, mis on väljaspool listi piire (nt kümnenda elemendi küsimine viieelemendilisest listist). Ohutuks pöördumiseks soovitatakse kontrollida listi pikkust omadusega Count või kasutada meetodit ElementAtOrDefault().
  • InvalidOperationException: See viga tekib siis, kui proovitakse listi muuta (elemente lisada või eemaldada) ajal, mil seda läbitakse foreach tsükliga. Selle vältimiseks on kolm peamist strateegiat:
    1. Kasutada tavalist for tsüklit ja indeksit.
    2. Itereerida listi koopia üle, kasutades meetodit .ToList().
    3. Kasutada LINQ-d uue filtreeritud listi loomiseks, selle asemel et olemasolevat muuta.

4. Millal kasutada?

Listid on parim valik olukordades, kus andmete kogus ei ole ette teada või see muutub programmi töö käigus. Need on mitmekülgsed ja toetavad järjestikuste andmete töötlemist väga mugavalt.

Näided:

 public static void Ridade_lugemine(string file)
    {
        List<string> kuude_list = new List<string>();
        try
        {
            string path = @$"..\..\..\{file}";
            ;
            foreach (string rida in File.ReadAllLines(path))
            {
                kuude_list.Add(rida);
            }
            foreach (string i in kuude_list) Console.WriteLine(i);
        }
        catch (Exception)
        {
            Console.WriteLine("Viga failiga");
        }

    }
    public static List<string> Ridade_lugemine_listiks(string file)
    {

        List<string> kuude_list = new List<string>();
        try
        {

            string path = @$"..\..\..\{file}";
            foreach (string rida in File.ReadAllLines(path))
            {
                kuude_list.Add(rida);

            }


        }

        catch (Exception)
        {
            Console.WriteLine("Viga failiga!");
        }
        return kuude_list;


    }
    public static void listi_muutmine(string file)
    {
        List<string> kuude_list = Ridade_lugemine_listiks(file);

        foreach (string kuu in kuude_list)
        {
            Console.WriteLine(kuu);
        }

        // Eemalda "Juuni"
        kuude_list.Remove("Juuni");

        // Muuda esimest elementi
        if (kuude_list.Count > 0)
            kuude_list[0] = "Veeel kuuu";

        Console.WriteLine("--------------Kustutasime juuni-----------");

        foreach (string kuu in kuude_list)
        {
            Console.WriteLine(kuu);
        }
    }
    public static void Otsing(string file)
    {
        List<string> kuude_list = Ridade_lugemine_listiks(file);
        Console.WriteLine("Sisesta kuu nimi, mida otsida:");
        string otsitav = Console.ReadLine();

        if (kuude_list.Contains(otsitav))
            Console.WriteLine("Kuu " + otsitav + " on olemas.");
        else
            Console.WriteLine("Sellist kuud pole.");
    }
    public static void Listisalvestamine(string file)
    {
        List<string> kuude_list = Ridade_lugemine_listiks(file);
        string path = @$"..\..\..\{file}";
        File.WriteAllLines(path, kuude_list);
        Console.WriteLine("Andmed on salvestatud.");
    }

7. Kasulikud meetodid

List<int> arvud = new List<int> { 3, 7, 2, 9, 1, 5 };

Console.WriteLine(arvud.Min());         // 1 – väikseim
Console.WriteLine(arvud.Max());         // 9 – suurim
Console.WriteLine(arvud.Sum());         // 27 – summa
Console.WriteLine(arvud.Average());     // 4.5 – keskmine
Console.WriteLine(arvud.Count);         // 6 – elementide arv

8. List vs Massiiv

List<T>massiiv[]
Suurusdünaamilinefikseeritud
Lisa/eemalda✅ lihtne❌ keeruline
Kiirusveidi aeglasemkiirem
Kasuta kuisuurus muutubsuurus teada ette