C# – Tömbök


Egydimenziós tömbök

Gyakran van szükségünk arra, hogy több azonos típusú objektumot tároljunk el, ilyenkor kényelmetlen lenne mindegyiknek külön változót foglalnunk. De ezt nem is kell megtennünk, hiszen rendelkezésünkre áll a tömb adatszerkezet. A tömb meghatározott számú, azonos típusú elemek halmaza. Minden elemre egyértelműen mutat egy index (egész szám). A tömbök referenciatípusok. A C# mindig folytonos memóriablokkokban helyezi el egy tömb elemeit. Tömböt úgy deklarálhatunk, hogy megadjuk a benne tárolandó adatok típusát, utána egy szögletes zárójelpárt írunk, majd adunk egy nevet a tömbünknek. Ezt követően egy egyenlőségjel után a new kulcsszó, utána egy szóköz és végül szögletes zárójelek között meg kell adnunk, hogy hány elemű lesz a tömbünk. Például hozzunk létre egy egész számok tárolására alkalmas 10 elemű tömböt, íme:

int[ ] szamok = new int[10];

Ha egyből fel is akarjuk tölteni a tömbünket, akkor a deklaráció után egy szóközt követően kapcsos zárójelek között, vesszővel elválasztva adjuk meg az elemeket.

int[ ] szamok = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

A tömb egy tetszőleges elemére úgy hivatkozhatunk, hogy a neve után szögletes zárójelek között megadjuk azt a sorszámot, amelyik elemre kíváncsiak vagyunk. Vigyázat, a számozás 0-val kezdődik! Például az előbbi tömb 6. elemére így hivatkozhatunk (az eredmény a 6-os szám lesz):

szamok[5];

Természetesen nem csak egész számok lehetnek egy tömbben, hanem valós számok, karakterek (char) és sztringek (string )is. Nézzünk erre is egy példát:

string[] gyumolcsok = new string[5] { “alma”, “körte”, “dió”, “szőlő”, “szilva”};

Egy tömb összes elemét ki tudjuk íratni egy erre alkalmas ciklussal. A következő képen ez látható.

Egy tömb által tárolható elemek számát a deklarációval azonnal meghatározzuk, ezen a későbbiekben nem lehet változtatni. Minden tömb a System.Array osztályból származik, ezért néhány hasznos művelet azonnal rendelkezésünkre áll (pl. rendezhetünk egy tömböt a Sort metódussal). Az előző példát használva rendezzük a tömböt, majd utána irassuk ki az elemeit. Az eredményben abc sorrendben láthatóak a gyümölcsnevek.

Végül lássunk egy olyan példát, ahol a tömb feltöltését ciklussal oldjuk meg, ráadásul véletlenszámokkal. A tömbünk elemeinek képernyőre írását pedig egy másik ciklussal oldjuk meg. Két újdonságot is észrevehetünk, amiket eddig nem használtunk. Az egyik a Random() függvény, ez véletlenszerűen generál számokat. A másik pedig egy tömb hosszának a lekérdezése, amelyet a Length() függvénnyel tehetünk meg. Később áttekintjük a tömb osztály (Array) hasznos függvényeit. Lássuk hát a megoldást:

Többdimenziós tömbök

Eddig az ún. egydimenziós tömböt (vektort) használtuk. Lehetőségünk van azonban többdimenziós tömbök létrehozására is, ekkor nem egy indexszel hivatkozunk egy elemre, hanem annyival, ahány dimenziós a tömb. Egy kétdimenziós tömbben az egyes elemekre két indexszel hivatkozunk, első helyen a sor áll és utána az oszlop (ne feledjük, nullától indexelünk). Hozzunk létre egy egész számok tárolására alkalmas kétdimenziós tömböt, ami 3 sorból és 3 oszlopból áll:

int[ , ] matrix = new int [3, 3];

Ha a létrehozáskor egyből fel is akarjuk tölteni elemekkel a kétdimenziós tömbünket, akkor ezt természetesen megtehetjük. A deklaráció után kapcsos zárójelek között vesszővel elválasztva  megadjuk a sorokat. A sorokon belül vesszővel elválasztva pedig az oszlopelemeket kell felvennünk. A következő képen egy ilyen tömböt láthatunk, melynek a matrix nevet adtam. Ugyanekkor ki is írjuk a tömb egy elemét, mégpedig a második sor harmadik elemét, azaz a 8-at. Ne feledjük, hogy most is, mint mindíg,  0-val kezdődik a számozás!

Egy másik példában egy 3 sorból és 5 oszlopból álló tömböt láthatunk, a kiírás eredménye pedig a 76!