C# egyéb összetett adattípusok

10. osztály 10évf_c# C# programozás Programozás

Ide tartoznak a stringek, a felsorolt típus, a rekordok, a lista, a szótár, és a halmaz.

Felsorolt típus

A felsorolt típus névvel ellátott értékekből áll. Felsorolt típus csak a következő típusokat veheti fel: byte, sbyte, short, ushort, int, uint, long, ulong. Ha egy felsorolt típus esetén nem rendelkezünk, hogy az milyen típuson tárolja az értékeket, akkor az alapértelmezés szerint int típus lesz. Egy felsorolt típust az enum kulcsszó után adhatunk meg. Először a nevét kell megadnunk, majd { } jelek között fel kell sorolnunk, hogy milyen elemei lesznek az új típusnak. Ha nem használunk értékadást az elemek megnevezése után, akkor azok értéke nullától kezdve egyesével fog nőni. Amennyiben valamely elem kap értéket, de az utána következő nem, akkor e második elem értéke az előzőhöz képest eggyel nagyobb lesz.

példa1: Hozzunk létre egy új felsorolt típust!

enum Game
{
Quake = -1,
Unreal,
GTA= 100,
FreeSpace
}

példa2: Hozzunk létre egy új felsorolt típust, amelyben sportágakat tárolunk! A neve: sportok. Az elemeire hivatkozhatunk a nevükkel. Írassuk ki az úszás, biciklizés sorszámát!

Enum típust csak metóduson kívül de osztályon belül lehet létrehozni! 

 

Struktúra, rekord

A rekord egy adattáblára hasonlít, oszlopokból és sorokból áll. Különböző típusú adatok tárolására képes. A rekordok olyan adatszerkezetek, melyek:

  • összetett, vagyis egy rekord típusú változóban egy időben több adat is tárolható,
  • inhomogének, vagyis a bennük tárolt adatok típusai különbözőek is lehetnek,
  • random elérésű, vagyis a rekord elemeihez azonos sebességgel lehet hozzáférni,
  • fix méretűek, vagyis deklaráláskor meg kell adni milyen adatokat (és hány darabot) akarunk tárolni,
  • folytonos tárolású, a rekordban tárolt értékek a memóriában egymás után helyezkednek el.

Első lépésben a rekordot, mint típust kell létrehoznunk, leírva azt, hogy milyen mezőkből épül fel, felsorolván a mezők típusait és neveit. Ennek az egész rekord típusnak adni kell egy azonosító nevet (a típus nevét). Később ezen típusnév felhasználásával tudunk rekord típusú változókat létrehozni, vagy akár ilyen típusú tömböket, listákat is. Egyetlen ilyen rekord típusú változó egyszerre több adatot is képes tárolni a mezőiben. Egyszerre egy mezővel szoktunk dolgozni.

A rekord típus létrehozásának egyik módja a struct kulcsszó használatával történik:

Ezzel hozunk létre egy új típust, melynek választott neve a ’DVD’ lesz. Három mezője van, a ’Cime’, ’Ara’, ’MegjelenesEve’. A public kulcsszó használata gyakorlatilag kötelező, mivel nélküle nem lehetne később a mező nevére hivatkozni. A public kulcsszó a védelmi szintek kapcsán kerül ismertetésre, és gyakorlatilag azt jelenti, hogy a mező neve, mint azonosító hatásköre terjedjen ki a programszöveg minden pontjára. Hiányában a befoglaló blokkjelig tartana, vagyis a mező nevére nem lehetne hivatkozni a DVD rekord típuson kívül.

Szótár

A szótár elempárok tárolására szolgál, melyek közül egyik a kulcs, amely azonosítja az elempárt, másik az érték, minden kulcs egyedi. Gyakorlatilag a szótár úgy viselkedik, mint egy lista, de az elemek indexe itt tetszőleges típusú lehet (pl.: szöveg).
Konstruktora generikus, paraméter nélküli:
◦ Dictionary<TKey, TValue>(): létrehoz egy szótárt, ahol TKey a kulcs, TValue az érték
típusa
Fő metódsai:

  • void Add( TKey key, TValue value ): a value érték hozzáadása key kulccsal
  • bool ContainsKey( TKey key ): megadja, hogy szerepel-e egy kulcs a szótárban
  • bool ContainsValue( TValue value ): megadja, hogy szerepel-e egy érték a szótárban (true vagy false)
  • bool Remove( TKey key ): eltávolít egy elemet a szótárból, a visszatérési érték a művelet sikerességét jelzi
  • int Count { get; }: az elemek (kulcsok) száma
  • void Clear(): szótár kiürítése
  • A szótár elemei a [] operátorral érhetőek el.
  • A szótárat foreach ciklussal lehet végig olvasni, amellyel a szótárból KeyValuePair<TKey, TVaule> típusú elemeket kapunk. Ezek Key és Value mezői adják a megfelelő kulcs és érték párokat.

Példa: Hozzunk létre egy 20 elemű tömböt, töltsük fel 1-10 közötti véletlen számokkal! Szótár segítségével számoljuk meg, melyik számból hány darab van! A véletlenszám lesz a kulcs, a számok darabszáma pedig az érték!

Gyümölcsök árai példa

Halmaz

Gyakorlatilag olyan lista, amiben nem lehetnek azonos elemek, hasonlóan a matematikái halmazokhoz.

  • Halmaz létrehozása: HashSet<típus> halmazneve = new HashSet<típus>();
  • Halmaz elemekkel kapcsolatos műveletek:
  • érték hozzáadása halmazhoz: halmazneve.Add(erték)
  • elem eltávolítása a halmazból: halmazneve.Remove(érték)
  • halmaz elemeinek törlése: halmazneve.Clear();
  • két halmaz uniója: alaphalmaz.UnionWith(halmazvene)
  • halmaz elemeinek száma: halmazneve.Count

Példa: Halmaz segítségével generáljunk ötöslottó nyerőszámokat! (5 szám, 1-90 közötti véletlen számok) Majd alakítsuk át tömbbé a halmazt, és rendezzük emelkedő számsorrendbe a számokat!

Szótár használata listával: Készíts listát, amely 100 db -100…100 közötti számot tartalmaz! Számold meg, melyik számból mennyi van!

Szótár használata, például filmek adatainak nyilvántartására. Hozz létre egy szótárt, amelybe filmek címét és a megjelenésük évét tudjuk nyilvántartani. Ebben az esetben a szótár kulcsa string típusú lesz, és a címeket fogja tartalmazni, míg a hozzájuk tartozó értékek az évszámok lesznek.