Összetett adattípusok¶
A Java-anyag ArrayList, HashSet és HashMap témáinak C# megfelelői a List<T>, HashSet<T> és Dictionary<TKey, TValue>. A Pythonból ismert lista, halmaz és szótár szerepe itt is hasonló. A <T> jelzi az elemek típusát; egy List<int> csak egész számokat tárol.
Tömb és List<T>¶
A tömb mérete rögzített, a List<T> bővíthető. Mindkettő nullától indexel.
Elem hozzáadása és elérése¶
Törlés, kiürítés, elemszám¶
autok.Remove("BMW"); // első egyező értéket törli; bool eredményt ad
autok.RemoveAt(0); // adott indexű elemet töröl
int darab = autok.Count;
autok.Clear();
Pythonban ezek megfelelői: remove, pop(index), len(lista) és clear. Érvénytelen indexnél C#-ban kivétel keletkezik.
Bejárás és rendezés¶
List<int> szamok = new() { 10, 15, 5, 20 };
foreach (int szam in szamok)
{
Console.WriteLine(szam);
}
szamok.Sort(); // növekvő sorrend
szamok.Reverse(); // most csökkenő sorrend
Console.WriteLine($"Minimum: {szamok.Min()}, maximum: {szamok.Max()}");
Az Min() és Max() üres listán kivételt dob; előbb ellenőrizzük a Count értékét. Pythonban sort(), reverse(), min() és max() használható.
HashSet<T>¶
A halmaz csak egyedi elemeket tárol. A bejárási sorrendre nem szabad építeni.
Két halmaz uniójához UnionWith, metszetéhez IntersectWith használható; ezek a bal oldali halmazt módosítják.
Dictionary<TKey, TValue>¶
A szótár kulcshoz értéket rendel. A kulcsok egyediek; kulcs szerinti lekérdezéskor célszerű TryGetValue-t használni, mert a hiányzó kulcsra a szotar[kulcs] kivételt dob.
Dictionary<string, int> jegyek = new()
{
["Anna"] = 5,
["Béla"] = 4
};
jegyek["Csilla"] = 3; // új elem, létező kulcsnál módosítás
if (jegyek.TryGetValue("Anna", out int jegy))
{
Console.WriteLine(jegy);
}
foreach (KeyValuePair<string, int> par in jegyek)
{
Console.WriteLine($"{par.Key}: {par.Value}");
}
jegyek.Remove("Béla");
Console.WriteLine(jegyek.Count);
jegyek.Clear();
Feladat¶
Olvass be neveket addig, amíg a felhasználó üres sort nem ad! Tárold őket listában, majd készíts halmazt az ismétlődések kiszűrésére. Szótárban számold meg, hogy az egyes nevek hányszor fordultak elő.