Listid/Massiivid

1. Massiivid (Fikseeritud andmekogumid)

Massiiv (array) on nagu riiulitega kapp, kuhu saame panna kindla arvu sama tüüpi andmeid. Massiivi suurus määratakse loomisel ja seda hiljem muuta ei saa.

Allpool on näha neli erinevat viisi, kuidas ühest ja samast massiivist andmeid kätte saada.

C#

// Loome massiivi, kus on täpselt 8 kohta (indeksid 0 kuni 7)
string[] nimed = new string[8] { "A", "B", "C", "D", "E", "F", "G", "H" };

// Muudame kolmanda elemendi väärtust (indeks algab alati nullist!)
nimed[2] = "Anna"; 

// MEETOD 1: while tsükkel
int index1 = 0;
while (index1 < nimed.Length) // .Length annab meile massiivi pikkuse
{              
    Console.WriteLine($"Tere, {nimed[index1]} (while)");
    index1++;
}

// MEETOD 2: for tsükkel
for (int i = 0; i < nimed.Length; i++)
{
    Console.WriteLine($"Tere, {nimed[i]} (for)");
}

// MEETOD 3: foreach tsükkel (Kõige ohutum ja mugavam massiivide läbimiseks!)
foreach (string nimi in nimed)
{
    Console.WriteLine($"Tere, {nimi} (foreach)");
}

// MEETOD 4: do-while tsükkel
int index2 = 0;
do
{
    Console.WriteLine($"Tere, {nimed[index2]} (do-while)");
    index2++;
} while (index2 < nimed.Length);

💡 Lisavõimalus (Massiivi sorteerimine):

C# pakub sisseehitatud tööriistu massiivide haldamiseks. Näiteks Array.Sort(nimed); paneb kõik nimed automaatselt tähestiku järjekorda!


2. Klassid ja Dünaamilised Nimekirjad (List)

Kui massiiv on fikseeritud suurusega, siis List on dünaamiline – me saame sinna elemente piiramatult juurde lisada ja eemaldada. Klass aitab meil koondada ühe teema andmed (nt Inimese nimi ja vanus) ühte loogilisse paketti.

C#

// 1. Loome oma andmetüübi ehk Klassi
class Isik
{
    public string Nimi;
    public int Vanus;

    // Klassi sisse saame teha ka spetsiaalseid meetodeid (tegevusi)
    public void Tervita()
    {
        Console.WriteLine($"Tere, minu nimi on {Nimi} ja ma olen {Vanus} vana.");
    }
}

static void Main()
{
    // 2. Loome dünaamilise nimekirja, mis hoiab endas 'Isik' tüüpi objekte
    List<Isik> inimesed = new List<Isik>();

    // 3. Küsime kasutajalt andmeid 3 korda
    for (int i = 0; i < 3; i++)
    {
        Console.Write("Sisesta nimi: ");
        string sisestatudNimi = Console.ReadLine();

        Console.Write("Sisesta vanus: ");
        int sisestatudVanus = int.Parse(Console.ReadLine());

        // Loome uue Isiku objekti ja anname talle väärtused
        Isik uusIsik = new Isik();
        uusIsik.Nimi = sisestatudNimi;
        uusIsik.Vanus = sisestatudVanus;

        // Lisame uue inimese listi lõppu
        inimesed.Add(uusIsik);
    }

    Console.WriteLine("\nKõik inimesed nimekirjas tervitavad:\n");

    // 4. Käime kõik listis olevad inimesed läbi ja kutsume nende Tervita() meetodit
    foreach (Isik isik in inimesed)
    {
        isik.Tervita();
    }
}


3. Tuple ehk Järjend

Mõnikord on vaja hoida koos mitut erinevat tüüpi andmeid (nt ID, Nimi, Palk), aga terve uue Klassi loomine tundub selle jaoks liigne vaev. Siin tulebki appi Tuple. Seda on väga hea kasutada ka funktsioonidest mitme vastuse tagastamiseks.

Klassikaline süntaks (Vana kool)

C#

// Loome tupli (ujukomaarv, märk, tekst)
Tuple<float, char, string> vanaTuple = new Tuple<float, char, string>(3.14f, 'A', "Programmeerimine");

// Elementidele pääseb ligi kohmakate Item1, Item2 jne nimedega
Console.WriteLine($"Esimene: {vanaTuple.Item1}"); // 3.14
Console.WriteLine($"Teine: {vanaTuple.Item2}");   // A

💡 Lisavõimalus (Kaasaegne ja puhas süntaks – ValueTuple):

Uuemates C# versioonides soovitame alati kasutada uut süntaksit, mis on lühem ja võimaldab andmetele anda loogilised nimed (mitte lihtsalt Item1 ja Item2). See on arendajate seas hetkel väga populaarne!

C#

// Loome tupli sulgude abil ja anname kohe elementidele selged nimed
var uusTuple = (Pi: 3.14f, Hinnang: 'A', Teema: "Programmeerimine");

// Nüüd on andmete kasutamine väga loogiline
Console.WriteLine($"Teema on {uusTuple.Teema} ja hinne on {uusTuple.Hinnang}");