C# gyűjtemények bemutatója példákkal
⚡ Okos összefoglaló
A C# gyűjteményei rugalmas módot kínálnak objektumcsoportok tárolására és kezelésére. A tömbökkel ellentétben a gyűjtemények futásidőben növekednek és zsugorodnak, a System.Collections és a System.Collections.Generic névterek pedig kész típusokat biztosítanak listákhoz, szótárakhoz, veremekhez és várólistákhoz.

Korábbi oktatóanyagunkban megtanultuk, hogyan használhatunk tömböket C#-ban. Vegyünk egy gyors áttekintést róla, a programozásban a tömbök a kapcsolódó objektumok csoportosítására szolgálnak. Így létre lehet hozni egy tömböt vagy egész számok halmazát, amelyhez egyetlen változónéven keresztül lehet hozzáférni.
Mi az a gyűjtemény a C#-ban?
A gyűjtemények hasonlóak a tömbök, rugalmasabb módot biztosít az objektumok csoportjával való munkavégzésre.
A tömböknél észrevette volna, hogy előre meg kell határoznia egy tömb elemeinek számát. Ezt a tömb deklarálásakor kellett megtenni.
De egy gyűjteményben nem kell előre meghatározni a gyűjtemény méretét. Bármikor hozzáadhat elemeket, vagy akár eltávolíthat elemeket a gyűjteményből. Ez a fejezet arra összpontosít, hogyan dolgozhatunk a C# nyelven elérhető különböző gyűjteményekkel.
System.Collections osztályok
A .NET-keretrendszer az eredeti, nem generikus gyűjteményosztályokat a System.Collections névtérben csoportosítja. Az alábbi táblázat összefoglalja a főbb típusokat, amelyeket azonnal használhatsz.
| Gyűjtemény | Leírás |
| Tömb lista | Az ArrayList gyűjtemény hasonló az Arrays-hez adattípus C#-ban. A legnagyobb különbség a tömblista-gyűjtemény dinamikus jellegében rejlik. |
| Stack | A halom egy speciális esetgyűjtemény, amely az utolsó be, első ki (LIFO) koncepciót képviseli. |
| sorok | A The Queue egy különleges kollekció, amely az „első be, első ki” koncepciót képviseli. |
| Hashtable | A hash tábla egy speciális gyűjtemény, amelyet kulcs-érték elemek tárolására használnak. |
| SortedList | A SortedList egy olyan gyűjtemény, amely alapértelmezés szerint a kulcs-érték párokat a kulcsok növekvő sorrendjében tárolja. |
| BitArray | A bittömb olyan adatstruktúra tömb, amely biteket tárol. |
Általános gyűjtemények C#-ban
A fenti nem generikus osztályok minden elemet általános objektumként tárolnak, ami azt jelenti, hogy a fordító nem tudja ellenőrizni a típust, és a program kis költséget fizet a dobozos értékekért. Ennek megoldására a C# hozzáadta a System.Collections.Generic névteret, ahol minden gyűjtemény egy deklarált típushoz van kötve.
Egy általános gyűjtemény, például a Lista csak karakterláncokat fogad el, így a hibákat fordítási időben észleli a rendszer, és nincs szükség konverzióra, amikor egy elemet visszaolvas. Ez biztonságosabbá, gyorsabbá és könnyebben olvashatóvá teszi az általános gyűjteményeket, ezért ezek az alapértelmezett választás a modern C# kódban.
A leggyakoribb generikus gyűjtemények az alábbiakban felsorolva vannak:
- Lista : Egy átméretezhető, indexalapú lista, az ArrayList általános helyettesítője.
- Szótár : Kulcs-érték párokat tárol gyors, hash alapú keresésekkel.
- HashSet : Csak egyedi értékeket tárol, és támogatja a halmazműveleteket, például az uniót.
- Sorban : Egy FIFO kollekció, a Queue generikus változata.
- Stack : Utolsóként beérkező, elsőként kimenő kollekció, a Stack generikus változata.
- Rendezett lista : A kulcs-érték párokat kulcs szerint növekvő sorrendben rendezi.
C# listagyűjtemény példa
A Lista a legszélesebb körben használt általános gyűjtemény, mivel dinamikus tömbként viselkedik. Az alábbi példa karakterláncokból álló listát hoz létre, elemeket ad hozzá és távolít el, beolvassa a méretét, majd kinyomtatja a fennmaradó értékeket. A teljes kód a Program.cs fájlban található.
Step 1) Importálja a System.Collections.Generic névteret, és deklaráljon egy karakterláncokból álló listát.
Step 2) Az Add metódussal adhatunk hozzá elemeket, az Remove metódussal pedig törölhetünk egyet.
Step 3) Olvasd be a Count tulajdonságot, majd menj végig a listán egy foreach utasítással.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code Magyarázat:-
- A System.Collections.Generic névtér importálva van, így a List típus elérhetővé válik a program számára.
- Egy új lista Létrejön a tutorials nevű objektum, és az Add metódussal három nevet adunk hozzá.
- A Remove metódus törli a „Python”, ami két elemet hagy a listában.
- A Count tulajdonság visszaadja az elemek számát, a foreach ciklus pedig sorban kinyomtatja a fennmaradó értékeket.
Amikor a program fut, először kinyomtatja a darabszámot. 2, Ezt követi Java és a Kotlin külön sorokban. Ez azt mutatja, hogyan változtatja meg egy gyűjtemény mérete futásidőben, amit egy fix tömb nem tud megtenni.
Különbség a tömbök és a gyűjtemények között C#-ban
Mindkettő egy sor és egy gyűjtemény a kapcsolódó elemeket egy név alatt csoportosítja, mégis másképp viselkednek, miután a program fut. Ha tudjuk, mikor kell használni őket, az segít tisztább és hatékonyabb kódot írni.
A fő különbségek az alábbiakban felsorolva vannak:
- Méret: Egy tömb hossza fix, a deklarációkor beállítva, míg egy gyűjtemény hossza bármikor növekedhet vagy zsugorodhat.
- Típuskezelés: Egy tömb egyetlen típust tárol, míg egy gyűjtemény lehet típusbiztos generikusokkal, vagy vegyes típusú objektumokat tartalmazhat, ha nem generikus.
- Bérleti díj: A tömbök be vannak építve a nyelvbe, míg a gyűjteményosztályok a System.Collections és a System.Collections.Generic névterekben találhatók.
- Beépített műveletek: A gyűjtemények kész metódusokat kínálnak az elemek hozzáadására, eltávolítására, keresésére és rendezésére, míg a tömbök csak alapvető indexelt hozzáférést biztosítanak.
- Legjobb felhasználás: Válasszunk tömböt, ha az elemek száma ismert és rögzített, és gyűjteményt, ha a darabszám a program futása során változik.
Röviden, a tömbök a fix méretű adatokhoz a legjobbak, míg a gyűjtemények biztosítják azt a rugalmasságot, amelyre a legtöbb valós alkalmazásnak szüksége van.
