Vodič za zbirke C# s primjerima
⚡ Pametni sažetak
Kolekcije u C# pružaju fleksibilan način pohranjivanja i upravljanja grupama objekata. Za razliku od nizova, kolekcije rastu i smanjuju se tijekom izvođenja, a imenski prostori System.Collections i System.Collections.Generic pružaju gotove tipove za liste, rječnike, stogove i redove čekanja.

U našem prethodnom vodiču naučili smo kako možemo koristiti nizove u C#. Hajdemo ga kratko pregledati. Nizovi se u programiranju koriste za grupiranje skupa povezanih objekata. Tako se može stvoriti polje ili skup cijelih brojeva, kojima se može pristupiti putem jednog naziva varijable.
Što su zbirke u C#?
Zbirke su slične nizovi, pruža fleksibilniji način rada s grupom objekata.
U nizovima ste primijetili da morate unaprijed definirati broj elemenata u nizu. Ovo je moralo biti učinjeno kada je polje deklarirano.
Ali u zbirci ne morate unaprijed definirati veličinu zbirke. Možete dodati elemente ili čak ukloniti elemente iz zbirke u bilo kojem trenutku. Ovo će se poglavlje usredotočiti na to kako možemo raditi s različitim kolekcijama dostupnim u C#.
System.Collections Klase
.NET Framework grupira izvorne negeneričke klase kolekcija unutar imenskog prostora System.Collections. Tablica u nastavku sažima glavne tipove koje možete odmah koristiti.
| Kolekcija | Description |
| ArrayList | Zbirka ArrayList slična je kolekciji Arrays tip podataka u C#. Najveća razlika je dinamička priroda zbirke popisa polja. |
| Stog | Stog je posebna kolekcija slučajeva koja predstavlja koncept "zadnji unutra, prvi van" (LIFO). |
| redovi | Red je posebna kolekcija slučajeva koja predstavlja koncept "prvi unutra, prvi van". |
| Raspršena tablica | Hash tablica je posebna kolekcija koja se koristi za pohranjivanje elemenata ključ-vrijednost. |
| SortedList | SortedList je zbirka koja pohranjuje parove ključ-vrijednost prema zadanim uzlaznim redoslijedom ključa. |
| BitArray | Niz bitova je niz strukture podataka koji pohranjuje bitove. |
Generičke kolekcije u C#
Gore navedene negeneričke klase pohranjuju svaki element kao opći objekt, što znači da kompajler ne može provjeriti tip i program plaća malu cijenu za pakiranje vrijednosti. Kako bi se to riješilo, C# je dodao imenski prostor System.Collections.Generic, gdje je svaka kolekcija vezana za jedan deklarirani tip.
Generička kolekcija kao što je Lista Prihvaća samo nizove znakova, pa se pogreške hvataju tijekom kompajliranja i nije potrebno pretvaranje (casting) prilikom čitanja stavke. To čini generičke kolekcije sigurnijima, bržima i lakšima za čitanje, zbog čega su zadani izbor u modernom C# kodu.
Najčešće generičke kolekcije navedene su u nastavku:
- Popis : Popis promjenjive veličine, temeljen na indeksu, generička zamjena za ArrayList.
- Rječnik : Pohranjuje parove ključ-vrijednost s brzim pretragama temeljenim na hashu.
- HashSet : Sadrži samo jedinstvene vrijednosti i podržava operacije sa skupovima kao što je unija.
- Red : Kolekcija "prvi ušao, prvi izašao", generička verzija Queue-a.
- Stog : Kolekcija "zadnji unutra, prvi van", generička verzija Stacka.
- Sortirani popis : Održava parove ključ-vrijednost sortirane po ključu u uzlaznom redoslijedu.
Primjer kolekcije C# liste
Lista je najčešće korištena generička kolekcija jer se ponaša kao dinamički niz. Primjer u nastavku stvara popis nizova, dodaje i uklanja stavke, čita njegovu veličinu, a zatim ispisuje preostale vrijednosti. Sav kod je napisan u datoteci Program.cs.
Korak 1) Uvezite imenski prostor System.Collections.Generic i deklarirajte popis nizova.
Korak 2) Dodajte stavke metodom Add, a izbrišite jednu metodom Remove.
Korak 3) Pročitajte svojstvo Count, a zatim prođite kroz listu pomoću naredbe foreach.
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 Obrazloženje:-
- Imenski prostor System.Collections.Generic se uvozi tako da je tip List dostupan programu.
- Novi popis nazvan tutorijali se stvara, a tri imena se dodaju metodom Add.
- Metoda Remove briše vrijednost "Python”, što ostavlja dvije stavke na popisu.
- Svojstvo Count vraća broj stavki, a petlja foreach ispisuje svaku preostalu vrijednost redom.
Kada se program pokrene, prvo ispisuje broj 2, Nakon čega slijedi Java i Kotlin u odvojenim retcima. Ovo pokazuje kako kolekcija mijenja svoju veličinu tijekom izvođenja, nešto što fiksni niz ne može učiniti.
Razlika između nizova i kolekcija u C#
Oba an poredak i kolekcija grupira povezane stavke pod jednim imenom, no one se ponašaju drugačije nakon što se program pokrene. Poznavanje kada koristiti koju od njih pomaže vam da napišete čišći i učinkovitiji kod.
Glavne razlike navedene su u nastavku:
- Veličina pakiranja: Niz ima fiksnu duljinu postavljenu prilikom deklaracije, dok kolekcija može rasti ili smanjivati u bilo kojem trenutku.
- Obrada tipova: Niz pohranjuje jedan tip, dok kolekcija može biti sigurna po tipu s generičkim objektima ili sadržavati objekte miješanih tipova kada nisu generički.
- Mjesto: Nizovi su ugrađeni u jezik, dok se klase kolekcija nalaze u imenskim prostorima System.Collections i System.Collections.Generic.
- Ugrađene operacije: Kolekcije nude spremne metode za dodavanje, uklanjanje, pretraživanje i sortiranje elemenata, dok nizovi pružaju samo osnovni indeksirani pristup.
- Najbolje korištenje: Odaberite niz kada je broj elemenata poznat i fiksan, te kolekciju kada se broj mijenja kako se program izvršava.
Ukratko, nizovi su najbolji za podatke fiksne veličine, dok kolekcije pružaju fleksibilnost koja je potrebna većini stvarnih aplikacija.
