Cvičení 6

ArrayHelper

  1. Vytvořte třídu ArrayHelper, která bude obsahovat pomocné metody pro práci s poli.
  2. Ve třídě ArrayHelper implementujte statickou metodu Swap, která bude přijímat tři parametry (pole a dva indexy). V rámci této metody dojde k záměně hodnot v daném poli na zadaných indexech. Metodu implementujte tak, aby ji bylo možné použít pro pole libovolného datového typu (je potřeba využít generické datové typy).
  3. Implementujte statickou metodu Concat, která bude přijímat dvě pole stejného datového typu a bude vracet nové pole stejného datového typu, které vznikne spojením těchto dvou polí.
  4. Implementaci otestujte.
  5. Pokud jste při implementaci využili generické datové typy na úrovni metod, upravte implementaci tak, aby byly generické typy definovány na úrovni celé třídy. Pokud jste je definovali na úrovni třídy, upravte implementaci tak, aby byly definovány na úrovni metod.

LinearDictionary

  1. Vytvořte generické rozhraní IKeyValuePair, které bude definovat vlastnosti Key a Value. Každá z vlastností může mít jiný datový typ. Konkrétní typy budou definovány v okamžiku použití rozhraní. Obě vlastnosti budou pouze pro čtení.
  2. Vytvořte třídu KeyValuePair, která bude implementovat rozhraní IKeyValuePair. Hodnoty vlastností Key a Value bude nutné definovat při vytváření instance této třídy. Obě vlastnosti budou pouze pro čtení.
  3. Vytvořte generickou třídu LinearDictionary, která bude reprezentovat strukturu typu „klíč–hodnota“ (slovník). Konkrétní datové typy klíče a hodnoty se budou definovat při vytváření instance této třídy. Pro ukládání záznamů využijte kolekci List<T>. Nevytvářejte vlastní implementaci seznamu.
  4. V rámci třídy LinearDictionary implementujte indexer pro nastavení a čtení hodnoty na základě klíče. Ideálně si vytvořte pomocné metody Set a Get, které budete v rámci indexeru volat. Při vkládání nového záznamu ověřte, zda již záznam se zadaným klíčem existuje. Pokud ano, aktualizujte jeho hodnotu. Pokud ne, přidejte nový záznam do seznamu. Při vyhledávání klíče procházejte uložené záznamy v seznamu.
  5. Třída LinearDictionary bude obsahovat generickou metodu ToList, která bude vracet pole všech hodnot (Value z IKeyValuePair) daného generického typu. Následně otestujte nad LinearDictionary, kde jako typ hodnoty použijte ValueType a jako generický parametr pro ToList použijte nejdříve int a poté double.
  6. Třída LinearDictionary bude obsahovat vlastnost Count, která bude vracet počet záznamů ve slovníku.
  7. Implementaci otestujte. Ověřte zejména vkládání nových záznamů, změnu hodnoty existujícího klíče, čtení hodnoty podle klíče a správnost vlastnosti Count.
  8. Doplňte metodu pro mazání hodnot na základě klíče.