C# Collections Tutorial s příklady
⚡ Chytré shrnutí
Kolekce v jazyce C# poskytují flexibilní způsob ukládání a správy skupin objektů. Na rozdíl od polí se kolekce za běhu zvětšují a zmenšují a jmenné prostory System.Collections a System.Collections.Generic poskytují hotové typy pro seznamy, slovníky, zásobníky a fronty.

V našem předchozím tutoriálu jsme se naučili, jak můžeme používat pole v C#. Udělejme si o tom rychlý přehled, pole v programování se používají k seskupování množiny souvisejících objektů. Dalo by se tedy vytvořit pole nebo sadu celých čísel, ke kterým by bylo možné přistupovat pomocí jednoho názvu proměnné.
Co jsou kolekce v C#?
Sbírky jsou podobné jako Pole, poskytuje flexibilnější způsob práce se skupinou objektů.
V polích byste si všimli, že musíte předem definovat počet prvků v poli. To muselo být provedeno při deklaraci pole.
Ve sbírce však nemusíte předem definovat velikost kolekce. Můžete přidávat prvky nebo dokonce prvky z kolekce kdykoli odebírat. Tato kapitola se zaměří na to, jak můžeme pracovat s různými kolekcemi dostupnými v C#.
Třídy System.Collections
Rozhraní .NET Framework seskupuje původní negenerické třídy kolekcí v rámci jmenného prostoru System.Collections. Následující tabulka shrnuje hlavní typy, které můžete ihned použít.
| Sbírka | Description |
| ArrayList | Kolekce ArrayList je podobná Arrays datový typ v C#. Největším rozdílem je dynamická povaha kolekce seznamů polí. |
| Stoh | Zásobník je speciální kolekce případů, která představuje koncept „poslední dovnitř, první ven“ (LIFO). |
| fronty | Fronta je speciální kolekce případů, která představuje koncept „first in first out“. |
| Hashtable | Hašovací tabulka je speciální kolekce, která se používá k ukládání položek typu klíč-hodnota. |
| SortedList | SortedList je kolekce, která ve výchozím nastavení ukládá páry klíč-hodnota ve vzestupném pořadí klíče. |
| BitArray | Bitové pole je pole datových struktur, které ukládá bity. |
Generické kolekce v C#
Výše uvedené negenerické třídy ukládají každý prvek jako obecný objekt, což znamená, že kompilátor nemůže kontrolovat typ a program platí malý poplatek za zabalení hodnot. Aby se tento problém vyřešil, C# přidal jmenný prostor System.Collections.Generic, kde je každá kolekce vázána na jeden deklarovaný typ.
Obecná kolekce, jako například List Přijímá pouze řetězce, takže chyby se zachytí při kompilaci a při zpětném čtení položky není nutné přetypování. Díky tomu jsou generické kolekce bezpečnější, rychlejší a snáze čitelné, a proto jsou v moderním kódu C# výchozí volbou.
Nejběžnější generické kolekce jsou uvedeny níže:
- Seznam : Seznam založený na indexech s možností změny velikosti, generická náhrada za ArrayList.
- Slovník : Ukládá páry klíč-hodnota s rychlým vyhledáváním založeným na hashování.
- Hašovací sada : Uchovává pouze jedinečné hodnoty a podporuje operace s množinami, jako je například sjednocení.
- Fronta : Kolekce typu „first in first out“, generická verze Queue.
- Stoh : Kolekce typu „poslední dovnitř, první ven“, generická verze Stacku.
- Seřazený seznam : Udržuje páry klíč-hodnota seřazené vzestupně podle klíče.
Příklad kolekce seznamů v jazyce C#
Seznam je nejpoužívanější generická kolekce, protože se chová jako dynamické pole. Následující příklad vytváří seznam řetězců, přidává a odebírá položky, čte jeho velikost a poté vypisuje zbývající hodnoty. Veškerý kód je napsán v souboru Program.cs.
Krok 1) Importujte jmenný prostor System.Collections.Generic a deklarujte seznam řetězců.
Krok 2) Položky přidáte metodou Add a jednu odstraníte metodou Remove.
Krok 3) Přečtěte vlastnost Count a poté projděte seznam pomocí příkazu 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 Vysvětlení:-
- Jmenný prostor System.Collections.Generic je importován, takže program má k dispozici typ List.
- Nový seznam s názvem tutoriály se vytvoří a pomocí metody Add se přidají tři názvy.
- Metoda Remove odstraní hodnotu „Python“, což v seznamu ponechává dvě položky.
- Vlastnost Count vrací počet položek a smyčka foreach vypíše všechny zbývající hodnoty v pořadí.
Když program běží, nejprve vypíše počet 2, následován Java a Kotlin na samostatných řádcích. Toto ukazuje, jak kolekce mění svou velikost za běhu, což fixní pole nedokáže.
Rozdíl mezi poli a kolekcemi v C#
Oba an řada a kolekce seskupuje související položky pod jedním názvem, přesto se po spuštění programu chovají odlišně. Vědět, kdy kterou položku použít, vám pomůže psát čistší a efektivnější kód.
Hlavní rozdíly jsou uvedeny níže:
- Velikost: Pole má pevnou délku nastavenou při deklaraci, zatímco kolekce se může kdykoli zvětšovat nebo zmenšovat.
- Zpracování typů: Pole ukládá jeden typ, zatímco kolekce může být typově bezpečná s generiky nebo může obsahovat objekty smíšených typů, pokud nejsou generické.
- pronájem: Pole jsou zabudována do jazyka, zatímco třídy kolekcí se nacházejí ve jmenných prostorech System.Collections a System.Collections.Generic.
- Vestavěné operace: Kolekce nabízejí hotové metody pro přidávání, odebírání, vyhledávání a řazení položek, zatímco pole poskytují pouze základní indexovaný přístup.
- Nejlepší využití: Vyberte pole, pokud je počet položek známý a pevný, a kolekci, pokud se počet mění během běhu programu.
Stručně řečeno, pole jsou nejlepší pro data s pevnou velikostí, zatímco kolekce poskytují flexibilitu, kterou většina reálných aplikací potřebuje.
