Úlohy na procvičení
Úlohy k procvičení. U všech úloh doporučuji začít tím, že si rozmyslíte signaturu funkce (parametry a jejich typy, typové parametry, návratovou hodnotu).
-
Napište funkci
Count
, která spočítá, kolik prvků sekvence splňuje zadaný predikát. Funkci můžete otestovat třeba tak, že ze seznamu vyberete pouze sudá čísla. Zkuste si predikát napsat jako lambdu. -
Napište funkci
First
, která vrátí první prvek sekvence splňující zadaný predikát. -
Napište funkci
Any
, která ověří, že alespoň jeden prvek sekvence splňuje zadaný predikát. -
Napište funkci
All
, která ověří, že všechny prvky sekvence splňují zadaný predikát. -
Napište funkci
Compose
, která složí dvě funkce. Parametry jsou funkce \(f: A \to B\) a \(g: B \to C\) a výsledek je funkce \((g \circ f)(x) = g(f(x))\). -
Napište funkci
Zip
, která vezme dvě sekvence a vyrobí sekvenci dvojic. Například kód:má vypsat:var numbers = new[] { 1, 2, 3 }; var letters = new[] { "a", "b", "c" }; foreach ((int number, string letter) in Zip(numbers, letters)) Console.WriteLine($"{number}: {letter}");
Pro zjednodušení můžete začít s tím, že vstupy i výstupy jsou pole, a pak teprve funkci zobecnit pro sekvence (1: a 2: b 3: c
IEnumerable
).Nápověda: Pokud chcete procházet
IEnumerable
bez použitíforeach
, podívejte se, jak funguje metodaGetEnumerator()
. -
Ze seznamu vět vyrobte seznam dvojic (věta, počet mezer v dané větě). Například pro seznam
je řešením["Hello, how are you?", "The quick brown fox jumps over a lazy dog."]
[("Hello, how are you?", 3), ("The quick brown fox jumps over a lazy dog.", 8)]
Učební výstupy
Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení.
- Umět definovat generické metody a třídy (s typovými parametry)
- Pomocí klíčového slova
where
upřesnit (omezit) typový parametr.
- Pomocí klíčového slova
- Umět v C# definovat proměnnou pro uložení funkce. Můžete použít klíčové slovo
delegate
nebo předpřipravené delegátyFunc<T, TResult>
,Action<T>
,Predicate<T>
, atd.