Læringsmål

  • Kan iterere over lister, arrays og dictionaries
  • Kan bruge nested loops til komplekse datastrukturer
  • Kan forklare forskellen på iteration over keys og values
  • Kan kombinere datastrukturer og loops i en samlet løsning

Iteration over collections

At iterere betyder at gennemløbe en samling element for element. Du har lært for, while, do-while og foreach i kapitlet Loops — her fokuserer vi på at anvende dem på arrays, lister og dictionaries.

foreach er særligt velegnet til samlinger — du gennemløber alle elementer uden at håndtere indeks. Brug for med indeks, når du skal kende positionen eller ændre elementer på bestemte pladser.

Vælg loop: foreach til simple gennemløb. for når du har brug for indeks eller nested strukturer. Se også Arrays, Lists & Dictionaries.

Iteration over arrays

Et array er en samling af samme type med fast længde.

Med for — når du har brug for indeks eller .Length:

Med foreach — når du bare skal læse hvert element:

Iteration over lister

En List<T> er dynamisk — brug .Count i stedet for .Length.

Med for:

Med foreach:

Du kan ikke tilføje eller fjerne elementer i en liste under en foreach — det giver runtime-fejl. Brug for baglæns eller ToList() hvis du skal fjerne under gennemløb.

Nested loops — lister af lister (matrix)

Når hvert element også er en liste, bruger du nested loops — en løkke inde i en anden:

Med foreach:

Den ydre løkke går gennem rækkerne; den indre gennem elementerne i hver række.

Iteration i praksis — IP-omformeren

Nested loops og while med break/continue bruger du i det rigtige IP/binær-projekt — se Binary Numbers & IP Addresses.

Typisk mønster i omformeren:

  • while (!gyldig) — spørg igen ved ugyldigt input
  • for (int i = 0; i < 4; i++) — gennemløb de 4 oktetter
  • for (int j = 0; j < 8; j++) — gennemløb de 8 bits per oktet
  • break — stop validering ved fejl; continue — spring til næste forsøg

Det kombinerer loops, conditionals og strings (Split) i én løsning.

Iteration over Dictionary

En Dictionary<TKey, TValue> gemmer nøgle/værdi-par. foreach er den naturlige måde at gennemløbe den:

Kun nøgler:

Kun værdier:

Deconstruction (moderne, læsbar syntaks):

Supplerende: LINQ og IEnumerable

LINQ (Language Integrated Query) er en måde at filtrere, sortere og udvælge data fra collections uden at skrive alle loops selv. Du bruger det typisk ovenpå List<T>, arrays og andre typer, der kan gennemløbes som IEnumerable<T>.

Videoer

Se det i praksis

Language Integrated Query (LINQ) and IEnumerable [Pt 15] | C# for Beginners

LINQ Query Expressions From, Where, Orderby, and Select [Pt 16] | C# for Beginners

LINQ Method Syntax vs Query [Pt 17] | C# for Beginners

Filtrering og akkumulering

Iteration kombineres ofte med if og sum:

Kombineret løsning — elever og fag

Dictionary af lister — nested foreach på to niveauer:

Det er præcis den slags struktur, du møder i GF2-projekter.

Git-trin

  • Branch: main
  • Commit: feat: iteration over collections

Opsummering

  • Arrays og lister — både for (med indeks) og foreach (simpelt gennemløb)
  • Lister af lister — nested loops (for/foreach indeni hinanden)
  • DictionariesKeyValuePair, .Keys, .Values eller deconstruction
  • Kombinér iteration med if (filtrering) og sum (akkumulering)
  • Real-world: IP-omformeren kombinerer while, for, break og continue

Test din viden

Spørgsmål 1

Hvornår er foreach særligt velegnet?

Spørgsmål 2

Hvad bruger du til antal elementer i en List<T> i en for-løkke?

Spørgsmål 3

Hvad er formålet med nested loops?

Spørgsmål 4

Hvordan får du kun nøglerne fra en Dictionary?

Spørgsmål 5

Hvorfor bør du undgå .Add()/.Remove() på en liste under foreach?

Spørgsmål 6

Hvad er mønsteret akkumulering i en løkke?

Spørgsmål 7

Hvornår vælger du for med indeks frem for foreach?