List<string>, .Add(), .Remove(), .RemoveAt(), .Count, indexy [0], foreach, .Contains()while (true), podmínky a proměnné z minulé hodinyforeach poprvé ukáže cyklus, který ví, kdy skončit.Tenhle blok je jen pro vás — dětem ho nepromítejte.
| Fáze | Co se děje | Čas |
|---|---|---|
| Rozjezd | Pět proměnných na pět věcí — ukážete, proč to nejde | 10 min |
| Výklad | Bloky Seznam je krabice na víc věcí až Máš to v batohu? | 35 min |
| Ukázky | Demo 1–5, demo 5 spojuje seznam s herní smyčkou z minula | 25 min |
| Cvičení | Děti pracují samy, vy obcházíte | 55 min |
| Závěr | Kdo chce, ukáže svůj inventář před třídou | 5 min |
Jedna věta: jedna proměnná může držet víc hodnot najednou a program dopředu nemusí vědět kolik.
Všechno ostatní (Add, Count, indexy, foreach) je jen nářadí k téhle myšlence.
Když si dítě odnese jen to, že „seznam je krabice s přihrádkami, které se dají
přidávat a ubírat", je hodina splněná.
Druhá věc, kterou stojí za to nechat zaznít: foreach je první cyklus, který
skončí sám od sebe. Minule museli break napsat ručně — teď se cyklus
zastaví, když dojdou věci. To je pro ně příjemné zjištění.
string[]). Rozdíl mezi polem a List<T> je téma pro pokročilé.
Dnes existuje jen List<T>, protože umí růst.List<string> čtěte prostě jako
„seznam textů". Slovo „generický typ" dnes nepadne..Max(), .Where(), .Sum()). Láká to, ale je to zkratka,
která přeskočí přemýšlení. Maximum si dnes najdeme foreachem a podmínkou —
přesně tak, jak to dělá procesor.batoh[0] je první věc.
Nejlepší obraz: index je „kolik kroků od začátku", ne „kolikátý v pořadí"..Count versus poslední index. Když je v batohu 5 věcí, poslední má
index 4. Tohle si musí osahat, ne zapamatovat.Remove("meč") versus RemoveAt(0). Jedno hledá podle obsahu,
druhé podle pozice. Pletou si to skoro všichni.Než řeknete slovo „seznam", nechte děti narazit na zeď.
Promítněte tenhle kód a řekněte: „hrdina sebral tři věci, vypište batoh."
string vec1 = "meč";
string vec2 = "štít";
string vec3 = "lektvar";
Console.WriteLine($"V batohu: {vec1}, {vec2}, {vec3}");
Funguje. A teď přitvrďte: „sebral čtvrtou věc. A pátou. A dvacátou."
Někdo navrhne vec4, vec5… nechte ho chvíli psát. Pak přijde otázka,
která hodinu otevře: „A co když dopředu nevíme, kolik věcí hrdina sebere?"
Tady se dvě proměnné nespojí. Potřebujeme jednu krabici s přihrádkami, která umí růst. Tomu se říká seznam.
Proměnná string udrží jeden text. Seznam udrží textů, kolik chceš.
Čti to po částech:
List<string> = seznam textů. V lomených závorkách je vždycky napsané,
co dovnitř patří.batoh je jméno, které si volíš ty.new List<string>() znamená „vyrob nový, zatím prázdný seznam"..Add("meč") přidá věc na konec seznamu..Count je počet věcí uvnitř.Tečka za jménem seznamu znamená „udělej se seznamem tohle".
Zkus si přidat čtvrtou věc — a všimni si, že nemusíš nic jiného měnit. Seznam roste sám.
Věci v seznamu jsou v řadě a každá má své číslo — index. A tady pozor: počítá se od nuly.
Proč od nuly?
Index neříká „kolikátá věc", ale „o kolik kroků od začátku". První věc je na začátku — nula kroků.
index: 0 1 2
meč štít lektvar
batoh.Count je 3, ale poslední index je 2.
Proto se poslední věc bere jako batoh[batoh.Count - 1].
Když sáhneš na batoh[3], program spadne — taková přihrádka neexistuje.
Vypisovat batoh[0], batoh[1], batoh[2] ručně je hloupost — a při deseti
věcech nemožnost. Od toho je foreach.
Přečti to jako větu:
„Pro každou věc vec v batohu udělej to, co je ve složených závorkách."
string vec je proměnná, která v každém kole drží jednu věc.in batoh říká, odkud se bere.break nepotřebuje.Jméno vec si volíš ty. Klidně foreach (string predmet in batoh).
Tohle je zásadní rozdíl oproti minulé hodině: while (true) běží,
dokud ho nezastavíš. foreach ví, kdy skončit.
Někdy chceš u každé věci i její pořadí. Pak si vedle foreach vezmeš počítadlo.
Počítadlo je nad cyklem — přesně jako minule stav nad herní smyčkou. Kdyby bylo uvnitř, bylo by pořád jedna.
Ve výpisu začínáme jedničkou, protože pro člověka je přirozenější „první věc" než „věc s indexem nula". Program uvnitř dál počítá od nuly, ale hráč to nemusí vědět.
Když hrdina lektvar vypije, musí z batohu zmizet. Na to jsou dva způsoby a je důležité je nepomíchat.
| Metoda | Co dělá |
|---|---|
.Remove("štít") |
najde věc podle obsahu a smaže první nalezenou |
.RemoveAt(0) |
smaže věc na dané pozici |
.Clear() |
vysype celý batoh |
Když Remove hledanou věc nenajde, nic se nestane a program nespadne.
Zato RemoveAt(10) v tříprvkovém seznamu program shodí.
Po každém odebrání se indexy posunou. To děti překvapí — a je to logické: když z řady odejde druhý, třetí se stane druhým.
Než hrdina něco použije, musí se program zeptat, jestli to vůbec má.
.Contains("lektvar") vrátí true, nebo false — přesně to, co potřebuje if.
Pozor na velká písmena: "Lektvar" a "lektvar" jsou pro počítač dvě různé věci.
Jak se s tím vypořádat, si ukážeme příště u řetězců.
Hodí se ještě .IndexOf("meč") — vrátí pozici věci, nebo -1, když tam není.
Do seznamu nemusí patřit jen text. List<int> je seznam celých čísel —
třeba škody, které hrdina rozdal v jednotlivých kolech.
Všechno je stejné, jen v lomených závorkách je int místo string.
foreach je skoda jedno konkrétní číslo.soucet / skody.Count dělí celá čísla, takže zbytek zahodí.
Průměr 15 z čísel 15, 22 a 8 je tedy „patnáct", ne „15,0".Seznam čísel se hodí na skóre, životy družiny nebo hody kostkou.
Pár věcí, které dětem neříkáte, ale vy je vědět chcete.
List<T> je generický typ. Zápis List<string> znamená „instance třídy
List parametrizovaná typem string". Kompilátor díky tomu hlídá,
že do seznamu nepřidáte číslo, a zároveň odpadá boxing, který trápil
starý ArrayList z .NET 1.1.
Uvnitř je pole. List<T> drží obyčejné pole a kapacitu. Když se zaplní,
alokuje nové pole dvojnásobné velikosti a data zkopíruje. Proto je Add
amortizovaně O(1), zatímco Insert(0, x) je O(n) — musí všechno posunout.
Remove(x) je taky O(n), protože nejdřív hledá.
foreach není magie. Kompilátor ho přeloží na volání GetEnumerator()
a opakované MoveNext() / Current. Praktický důsledek, na který děti narazí:
když uvnitř foreach seznam změníte, program vyhodí InvalidOperationException
(„Collection was modified"). Řešení, které dnes stačí ukázat: nejdřív si
poznamenat, co se má smazat, a smazat to až po cyklu.
using System.Collections.Generic; by byl potřeba ve starším C#.
Od .NET 6 jsou zapnuté implicit usings, takže List<T> funguje rovnou —
a naše prostředí je má zapnuté taky.
Proč ne LINQ. skody.Max() je jednořádkové a svůdné, ale schová
přesně to přemýšlení, které dnes trénujeme. Nechte foreach. LINQ přijde,
až budou mít cykly v malíku.
Nejjednodušší možný inventář: pár věcí, počet a hezký výpis.
Co u toho říct: změňte počet věcí přímo před třídou. Výpis se přizpůsobí sám — nic dalšího přepisovat nemusíte. Přesně proto seznamy existují.
Batoh není jen sklad. Věci do něj přibývají a zase mizí.
Co u toho říct: Contains před Remove je dobrý zvyk. Zeptejte se,
co by se stalo, kdyby hrdina lektvar neměl — Remove by tiše neudělal nic
a hláška by přesto lhala.
Seznam čísel a foreach dokážou spočítat věci, na které by ručně nikdo neměl trpělivost.
Co u toho říct: hledání maxima je klasický algoritmus. nejvic začíná
na nule a při každém větším čísle se přepíše. Nechte děti popsat,
co se v proměnné děje kolo po kole — to je celé „myšlení jako počítač".
Jeden seznam je zboží v obchodě, druhý je batoh. Nákup znamená přesun.
Co u toho říct: nákup jsou tři kroky — odečíst peníze, přidat do batohu, odebrat z nabídky. Když jeden krok vynecháte, obchod začne podvádět. Nechte děti najít, který krok chybí, když ho schválně smažete.
Tady se minulá hodina potkává s dnešní: smyčka běží, seznam si pamatuje.
Console.ReadLine() — jeden řádek na jedno čtení.Co u toho říct: List<string> batoh je deklarovaný nad smyčkou —
úplně stejné pravidlo jako minule u životů a zlata. Kdyby byl uvnitř,
batoh by se každé kolo vysypal.
Zkuste do vstupního okénka přidat další řádky a spustit znovu.
Čtyři chyby, na které u seznamů narazí úplně každý.
List<string> batoh = new List<string>();
batoh.Add("meč");
batoh.Add("štít");
Console.WriteLine(batoh[2]);
Tenhle kód spadne. V batohu jsou dvě věci, takže existují indexy 0 a 1. Index 2 už ne.
Hláška zní ArgumentOutOfRangeException a znamená prostě:
„sáhl jsi vedle."
Správně je batoh[batoh.Count - 1].
| Hláška / projev | Co se stalo | Jak to spravit |
|---|---|---|
ArgumentOutOfRangeException |
Sáhl jsi na index, který neexistuje | Poslední věc je batoh[batoh.Count - 1] |
InvalidOperationException: Collection was modified |
Uvnitř foreach jsi ze seznamu mazal |
Poznamenej si, co smazat, a smaž to až po cyklu |
CS1061: List<string> does not contain a definition for 'Length' |
Seznam nemá Length |
U seznamu je to .Count |
CS0165: Use of unassigned local variable |
Chybí = new List<string>() |
Seznam se musí nejdřív vyrobit |
| Program nic nevypíše | Seznam je prázdný, foreach nemá co projít |
Zkontroluj, jestli se Add opravdu provedl |
Remove nic neudělal |
Text se neshoduje úplně přesně | "Meč" není "meč" — porovnej znak po znaku |
Chybu „Collection was modified" schválně vyrobte na projektoru:
List<string> batoh = new List<string>();
batoh.Add("meč");
batoh.Add("štít");
foreach (string vec in batoh)
{
batoh.Remove(vec);
}
Vypadá to nevinně a spadne to. Vysvětlení pro děti stačí obrazné: „nemůžeš trhat stránky z knihy, kterou zrovna čteš."
// TODO.
Když nevíš, klikni na 💡 Poradit u příslušného bodu zadání —
v dílně se ti kód posune o jeden krok dál. Nejdřív to ale zkus sám.
Tvoje zadání:
Každý čaroděj má svůj seznam kouzel. Ten tvůj se bude učit nová.
- Vytvoř seznam
kouzlaa přidej do něj tři kouzla💡 Poradit
List<string> kouzla = new List<string>();a pak třikrátkouzla.Add("...");.
Kouzla si vymysli — třeba „ohnivá koule".- Vypiš, kolik kouzel čaroděj umí
💡 Poradit
Počet jekouzla.Count. Použij interpolaci:Console.WriteLine($"Umíš {kouzla.Count} kouzel.");.- Vypiš všechna kouzla pod sebe pomocí
foreach💡 Poradit
foreach (string kouzlo in kouzla) { Console.WriteLine($"✨ {kouzlo}"); }.
Uvnitř závorek je vždycky jedno konkrétní kouzlo.- Přidej číslování — každé kouzlo dostane své pořadí
💡 Poradit
Počítadloint cislo = 1;musí být nad cyklem.
Uvnitř pakcislo++;na konci.- Vypiš první a poslední kouzlo ze seznamu
💡 Poradit
První jekouzla[0]. Poslední jekouzla[kouzla.Count - 1]— protože indexy začínají nulou.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3: seznam existuje a foreach ho vypíše |
| Rozšíření | Body 4–5 s číslováním a prací s indexy |
| Výzva | Přidat čtvrté kouzlo pomocí Insert(0, "...") na začátek seznamu |
Očekávaný výsledek: očíslovaná kniha kouzel, která se sama přizpůsobí počtu kouzel v seznamu.
Kde se zaseknou:
new List<string>(). Napíšou jen List<string> kouzla;
a kompilátor se ohradí (CS0165). Obraz: deklarace je jméno na krabici,
new je ta krabice.kouzla[3] jako poslední. Klasika. Nechte je spočítat na prstech
a pak ukažte kouzla.Count - 1.Count() se závorkami. Count je vlastnost, ne metoda. Závorky navíc
vyhodí chybu — dobrá příležitost říct, že tečka může vést k obojímu.Kdo je hotový dřív: kouzla.Insert(0, "blesk"); přidá kouzlo na začátek
a posune ostatní. Nechte je uhodnout, co se stane s kouzla[0].
Otázka na závěr cvičení: „Kolik věcí je v seznamu, když je poslední index 4?" Pět.
Tvoje zadání:
Hrdina neunese všechno. Batoh pojme nejvýš čtyři věci — a program to musí hlídat.
- Vytvoř prázdný seznam
batoha proměnnoulimit = 4💡 Poradit
List<string> batoh = new List<string>();a pod toint limit = 4;.
Seznam zatím zůstane prázdný — věci přidáš až v dalších krocích.- Přidej do batohu tři věci a vypiš obsah
💡 Poradit
Třikrátbatoh.Add("...");a pakforeach (string vec in batoh) { Console.WriteLine($" • {vec}"); }.- Zkus přidat čtvrtou věc, ale jen když se do batohu vejde
💡 Poradit
Podmínka porovná počet s limitem:if (batoh.Count < limit) { batoh.Add("lano"); } else { Console.WriteLine("Batoh je plný!"); }.- Zkus přidat pátou věc — ta se už vejít nesmí
💡 Poradit
Stejná podmínka, jiná věc. Když ti pátá věc projde, zkontroluj, jestli používáš<a ne<=.- Vyhoď jednu věc a vypiš, kolik místa v batohu zbývá
💡 Poradit
batoh.Remove("štít");a pakConsole.WriteLine($"Volné místo: {limit - batoh.Count}");.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2: batoh se naplní a vypíše |
| Rozšíření | Body 3–4: limit opravdu funguje a pátá věc se nevejde |
| Výzva | Před vyhozením ověřit Contains a navíc vypsat ukazatel místa z new string('▪', ...) |
Očekávaný výsledek: batoh, do kterého se čtvrtá věc ještě vejde a pátá už ne — a program to slušně oznámí.
Kde se zaseknou:
<= místo <. Do batohu se vejde pět věcí místo čtyř. Nejlepší chyba
hodiny: nechte je spočítat, kolik věcí tam skutečně skončilo.Add. Věc se přidá a teprve pak se program ptá,
jestli se vejde. Stejné pořadí jako minule u zlata.limit stačí změnit jedno místo. Programátorská lenost je ctnost.Remove na neexistující věc. Nespadne, jen tiše neudělá nic.
Proto se hodí Contains předtím.Kdo je hotový dřív: ukazatel zaplnění:
new string('▪', batoh.Count) + new string('·', limit - batoh.Count).
Otázka na závěr cvičení: „Proč je v podmínce < a ne <=?"
Protože se ptáme před přidáním — musí zbýt aspoň jedno volné místo.
Tvoje zadání:
Hrdina bojoval pět kol. Spočítej, jak si vedl — ale všechno musí spočítat program, ne ty.
- Vytvoř
List<int> skodya přidej do něj pět čísel💡 Poradit
List<int> skody = new List<int>();a pětkrátskody.Add(12);s různými čísly.
Uvnitř lomených závorek je teďint, protože jde o čísla.- Vypiš všechna čísla i s číslem kola
💡 Poradit
Počítadloint kolo = 1;nad cyklem, uvnitřConsole.WriteLine($"{kolo}. kolo: {skoda}");akolo++;.- Spočítej celkové poškození
💡 Poradit
Proměnnáint soucet = 0;musí být nad cyklem, uvnitř paksoucet = soucet + skoda;.- Najdi nejsilnější zásah
💡 Poradit
int nejvic = 0;nad cyklem a uvnitř podmínkaif (skoda > nejvic) { nejvic = skoda; }.- Vypiš souhrn: počet kol, součet, maximum a průměr
💡 Poradit
Průměr jesoucet / skody.Count. Souhrn patří pod cyklus — až když je spočítáno všechno.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3: čísla se vypíšou a součet sedí |
| Rozšíření | Body 4–5 s maximem a souhrnem |
| Výzva | Najít i nejslabší zásah a ke každému kolu dokreslit sloupec new string('█', skoda / 3) |
Očekávaný výsledek: pět řádků záznamu a pod nimi souhrn, který sedí na to, co je vidět nahoře.
Kde se zaseknou:
soucet uvnitř cyklu. Součet se každé kolo vynuluje a na konci
zůstane poslední škoda. Stejné pravidlo jako u stavu nad herní smyčkou —
připomeňte, že je to potřetí, co na to narazili.nejvic začíná na velkém čísle. Někdo dá int nejvic = 100;
a maximum se nikdy nepřepíše. Nula funguje, protože škody jsou kladné.}, nebo pod ním?"soucet / skody.Count zahodí desetinnou část.
Není to chyba, ale řekněte to nahlas, ať se nediví.Kdo je hotový dřív: hledání minima (int nejmene = 999; a obrácená
podmínka) a sloupcový graf new string('█', skoda / 3).
Otázka na závěr cvičení: „Proč nejvic začíná na nule a ne na sto?"
Protože první škoda ho musí přebít.
Tvoje zadání:
Do družiny se přidávají a odcházejí hrdinové. Seznam umí i věci, které bys sám dělal dlouho.
- Vytvoř seznam
druzinase čtyřmi jmény a vypiš ho💡 Poradit
List<string> druzina = new List<string>();a čtyřikrát.Add().
Na výpis použijforeach— bude se hodit ještě několikrát.- Seřaď družinu podle abecedy a vypiš znovu
💡 Poradit
Stačí jediný řádek:druzina.Sort();.
Pozor —Sortnic nevrací, mění přímo ten seznam, který má před tečkou.- Otoč pořadí pozpátku a vypiš
💡 Poradit
druzina.Reverse();obrátí pořadí věcí.
Když ho dáš hned zaSort(), dostaneš abecedu odzadu.- Zjisti, na které pozici stojí konkrétní hrdina
💡 Poradit
int pozice = druzina.IndexOf("Elora");.
Když tam jméno není, vrátí-1— na to se dá zeptat podmínkou.- Přidej velitele na začátek a posledního člena vyhoď
💡 Poradit
druzina.Insert(0, "Velitel Torm");vloží na pozici 0 a ostatní posune.
Posledního odebereš přesdruzina.RemoveAt(druzina.Count - 1);.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–2: družina se vypíše a seřadí |
| Rozšíření | Body 3–4: obrácení pořadí a hledání pozice |
| Výzva | Ošetřit IndexOf, když hrdina v družině není (-1), a vypsat všechny tři verze seznamu pod sebe |
Očekávaný výsledek: tři různá pořadí téhož seznamu a nakonec družina s velitelem v čele.
Kde se zaseknou:
druzina = druzina.Sort(); Klasický omyl z jiných jazyků. Sort()
nic nevrací, mění seznam přímo. Kompilátor to hezky odmítne — využijte to.Sort() a Reverse() nic nevypíšou
a diví se, že „to nic nedělá". Změna je vidět jen tehdy, když ji vypíšeš.Sort() řadí podle nastavení prostředí, takže
Č nemusí skončit tam, kde bychom čekali. Neřešte to, jen to zmiňte.RemoveAt(druzina.Count). O jedna vedle — a program spadne.
Poslední index je vždycky Count - 1.Kdo je hotový dřív: hledat jméno, které v družině není, a ošetřit -1.
Případně přidat druhého velitele a nechat je vysvětlit, co udělá Insert(0, ...)
podruhé.
Otázka na závěr cvičení: „Co vrátí IndexOf u jména, které v seznamu není?"
Mínus jedna — a proto se na to ptáme podmínkou.
Tvoje zadání:
Finále hodiny: spoj herní smyčku z minula se seznamem z dneška.
- Nad smyčkou vytvoř seznam
batohs jednou věcí a vypiš nabídku příkazů💡 Poradit
Seznam musí vzniknout nadwhile, jinak by se každé kolo vysypal.
Do nabídky napiš:seber, zahoď, batoh, konec.- Přidej smyčku
while (true)s pojistkou abreaknakonec💡 Poradit
Stejná kostra jako minulou hodinu:Console.Write("> ");,string prikaz = Console.ReadLine();aif (prikaz == null || prikaz == "konec") { break; }.- Příkaz
batohvypíše obsah pomocíforeach💡 Poradit
Uvnitř větve je celý cyklus — cyklus ve smyčce. Odsazuj po čtyřech mezerách, ať se v závorkách neztratíš.
Vypiš i počet:{batoh.Count}.- Příkaz
seberpřidá pochodeň, ale jen když ji hrdina ještě nemá💡 Poradit
Nejdřív se zeptej:if (batoh.Contains("pochodeň")) { ... } else { batoh.Add("pochodeň"); }.- Příkaz
zahoďvyhodí poslední věc a pod smyčkou vypiš souhrn💡 Poradit
Poslední věc:batoh.RemoveAt(batoh.Count - 1);— ale jen kdyžbatoh.Count > 0.
Souhrn patří až pod uzavírací}smyčky.
| Úroveň | Co má zvládnout |
|---|---|
| Minimum | Body 1–3: smyčka běží a příkaz batoh vypíše obsah |
| Rozšíření | Body 4–5: sbírání s kontrolou a vyhazování poslední věci |
| Výzva | Přidat seber lano, limit batohu na 4 věci a počítadlo, kolik věcí hrdina za hru sebral |
Console.ReadLine() — jeden řádek na jedno čtení.Očekávaný výsledek: hratelný inventář. Děti si ho budou chtít pustit několikrát s jiným vstupem — nechte je.
Kde se zaseknou:
foreach uvnitř while uvnitř if je pro ně nejhlubší
vnoření, jaké zatím psali. Ať odsazují, ať to vidí.RemoveAt(batoh.Count). O jedna vedle a program spadne. Kontrola
batoh.Count > 0 navíc řeší prázdný batoh.string vyhozeno = ...; před RemoveAt.Kdo je hotový dřív: limit batohu (proměnná limit a kontrola v seber),
příkaz seber lano a počítadlo sebraných věcí za celou hru.
Otázka na závěr cvičení: „Kde přesně je v tvém programu stav hry?"
Odpověď: seznam batoh nad smyčkou. Tohle je hlavní myšlenka obou hodin.
Console.ReadLine() — jeden řádek na jedno čtení.Zadání: Alchymista potřebuje přísady na velký lektvar. Napiš program, který jeho seznam zvládne.
prisady a přidej do něj pět přísad.foreach a počítadla."dračí šupina" — a napiš, co zjistíš.Co musí program umět:
| Požadavek | Popis |
|---|---|
| Seznam | List<string> vytvořený přes new List<string>() |
| Procházení | Alespoň dva výpisy pomocí foreach |
| Rozhodování | Contains v podmínce if |
| Změna seznamu | Aspoň jedno Remove (nebo RemoveAt) a jedno Add |
| Souhrn | Počet přísad přes .Count |
Bonus (nepovinně): přidej List<int> ceny, spočítej foreachem
celkovou cenu nákupu a napiš, jestli alchymistovi stačí 100 zlatých.
Úkol je schválně poskládaný ze čtyř věcí, které dnes trénovali:
vytvoření seznamu, foreach, Contains a změna obsahu. Nic nového.
Při opravě sledujte hlavně dvě věci: jestli je počítadlo nad cyklem
a jestli po Remove/Add seznam vypisují znovu — jinak změnu není vidět.
Nejčastější odevzdaná chyba: Sort() zavolaný, ale nikdy nevypsaný výsledek.
Dobrý námět na příští hodinu: „změna, kterou nikdo nevidí, je pro uživatele
stejná jako změna, která se nestala."
Až budeš chtít vědět víc, tady jsou původní zdroje. Jsou anglicky, ale kód v nich je stejný jako ten tvůj.
| Téma | Odkaz |
|---|---|
Třída List<T> |
learn.microsoft.com — List<T> |
List<T>.Add |
learn.microsoft.com — Add |
List<T>.Remove a RemoveAt |
learn.microsoft.com — Remove |
List<T>.Contains |
learn.microsoft.com — Contains |
List<T>.Sort |
learn.microsoft.com — Sort |
Příkaz foreach |
learn.microsoft.com — foreach |
| Kolekce v C# | learn.microsoft.com — collections |
Dneska se tvůj program naučil pracovat s množstvím. Do teď uměl jednu hodnotu v jedné proměnné. Teď zvládne pět věcí — nebo padesát, a nemusíš kvůli tomu přepsat ani řádek.
| Dovednost | Kde se ti bude hodit |
|---|---|
List<T> a .Add() |
Inventář, seznam úkolů, playlist, kontakty v telefonu |
| Indexy od nuly | Úplně všude v programování — od tabulek po pixely obrázku |
foreach |
Vždycky, když chceš „udělat něco s každým" |
.Contains() |
Vyhledávání, filtry, kontrola oprávnění |
Kde to potkáš v životě: každý seznam, který na telefonu odscrolluješ —
zprávy, písničky, fotky — je uvnitř přesně takováhle kolekce. Aplikace
neví dopředu, kolik jich bude, a foreach je vykreslí jeden po druhém.
Příště: hrdina má batoh, ale mluví jako robot. Příště se naučíme pracovat s textem — rozdělovat ho, spojovat, hledat v něm a skládat z něj hlášky. CsQuest konečně začne mluvit lidsky.