Abschnittsübersicht

    • Co jsou to kolekce objektů?

      Kolekce objektů (List<>) jsou specializované datové struktury, které slouží k seskupování a správě většího množství souvisejících objektů [1]. Umožňují efektivně ukládat data, ke kterým potřebujeme přistupovat hromadně, a v souladu se správnými programátorskými praktikami nabízejí nástroje pro jejich třídění či prohledávání [2]. Hlavní myšlenkou kolekcí je flexibilita a dynamická velikost – na rozdíl od klasických polí (arrays) se velikost kolekce automaticky přizpůsobuje, můžeme do ní za běhu programu libovolně přidávat nebo odebírat položky a následně je snadno vykreslit v uživatelském rozhraní [1].

      V jazyce C# a na platformě .NET [3] se kolekce nejčastěji definují pomocí generické třídy List<T>, kde T nahrazujeme konkrétním typem objektu. Zápis List<Uzivatel> seznam = new List<Uzivatel>(); říká kompilátoru: "Vytvoř nový dynamický seznam, do kterého budeme moci vkládat pouze objekty typu Uživatel" [3].

      Základní metody a vlastnosti

      Metoda Add() – metoda, která přidává nový objekt na konec kolekce [1]. Pokud seznam ještě neexistoval (nebo přesáhl svou původní kapacitu), automaticky se zvětší. Zapisujeme způsobem nazevSeznamu.Add(novyObjekt);.

      Metoda Remove() – metoda, která vyhledá konkrétní objekt v seznamu a odstraní ho [3]. Ostatní prvky se po odstranění posunou, aby v seznamu nevznikla mezera. Zapisujeme způsobem nazevSeznamu.Remove(objekt);.

      Vlastnost Count – vlastnost, která vrací aktuální počet položek uložených v kolekci [1]. Slouží k rychlé kontrole, zda je seznam prázdný nebo kolik obsahuje dat. Zapisujeme způsobem nazevSeznamu.Count.

      Metoda Clear() – metoda, která okamžitě odstraní všechny položky ze seznamu a velikost kolekce vrátí na nulu [3]. Zapisujeme způsobem nazevSeznamu.Clear();.

      Metoda Where() – vyfiltruje prvky z kolekce na základě zadané podmínky a vrátí jen ty, které ji splňují. Zapisujeme například kolekce.Where(x => x.Cena > 1000);.

      Metody OrderBy() a OrderByDescending() – slouží k řazení prvků. OrderBy() řadí vzestupně, zatímco OrderByDescending() sestupně (od největšího).

      Metoda Select() – takzvaná projekce. Umožňuje z celého složitého objektu "vytáhnout" pouze konkrétní vlastnost (např. pouze název) a vytvořit z ní novou, zjednodušenou kolekci. Zapisujeme kolekce.Select(x => x.Nazev);.

      Metoda GroupBy() – rozdělí velkou kolekci do několika menších podskupin na základě společného klíče (např. produkty podle kategorie). Zapisujeme například kolekce.GroupBy(x => x.Kategorie);.

      Metoda FirstOrDefault() – najde a vrátí první objekt, který splňuje danou podmínku (např. shodu ID). Pokud ho nenajde, vrátí hodnotu null, čímž zabrání pádu aplikace. Zapisujeme například kolekce.FirstOrDefault(x => x.Id == 3);.

      Metoda Any() – zkontroluje seznam a vrátí logickou hodnotu true, pokud alespoň jeden prvek splňuje zadanou podmínku (jinak false). Zapisujeme například kolekce.Any(x => x.Cena > 10000);.

      Agregační metody (Sum, Average, Min, Max) – slouží k rychlým matematickým výpočtům nad kolekcí. Sum() vypočítá celkový součet, Average() průměr, Min() nejmenší a Max() nejvyšší hodnotu specifikované vlastnosti.

      Metoda ToList() – většina LINQ příkazů vrací specifický datový typ. Přidáním této metody na úplný konec dotazu se výsledek převede zpět na klasický seznam, se kterým už bezpečně umíme pracovat. Zapisujeme .ToList();.

    • V Zadání úkolu najdete jednoduchý úkol, který objasňuje principy práce s kolekcemi objektů.

    • V Zadání úkolu najdete jednoduchý úkol, který objasňuje příkazy jako Where, Select, GroupBy apod. 

    • Kolekce objektů obsahující kolekce objektů

      Kolekce objektů obsahující další kolekce (často nazývané vnořené kolekce) jsou strukturovaná data, která reprezentují hierarchické vztahy mezi objekty [1]. Umožňují modelovat složitější vazby typu "rodič-potomek", kde jeden nadřazený prvek obsahuje celou skupinu podřízených prvků. Hlavní myšlenkou je organizace dat do víceúrovňové nebo stromové struktury – v souladu s didaktickými principy logické organizace informací [2] namísto jediného plochého seznamu vytváříme systém, který logicky seskupuje data (například seznam kategorií, kde každá kategorie má svůj vlastní seznam produktů) a umožňuje je vykreslit například jako rozbalovací menu [1].

      V jazyce C# a na platformě .NET [3] se tato struktura realizuje definováním vlastnosti typu List<T> uvnitř jiné třídy. Zápis public List<Produkt> Produkty { get; set; } = new List<Produkt>(); uvnitř třídy Kategorie říká kompilátoru: "Každý jeden objekt kategorie bude mít svůj vlastní seznam na produkty, který musíme ihned vytvořit" [3].

      Základní pojmy a konstrukce

      Vnořená vlastnost – vlastnost třídy, která je definována jako seznam jiných objektů. Slouží k fyzickému propojení rodiče s jeho dětmi [1]. Zapisujeme způsobem public List<TypDitete> NazevSeznamu { get; set; }.

      Vnořený cyklus – programovací konstrukce, kdy je jeden cyklus umístěn uvnitř druhého. Slouží k vykreslení hierarchie, kdy vnější cyklus prochází kategorie a vnitřní cyklus vypisuje produkty dané kategorie [1]. Zapisujeme vložením příkazu foreach do těla jiného foreach.

    • V zadání úkolu najdete jednoduchý úkol, který objasňuje principy kolekcí objektů vnořených do kolekcí objektů.

    • Zdroje použité v textu