Hvad er Lister?

Forestil dig en situation, hvor vi ønsker at gemme navnene på alle de studerende, der deltager i et bestemt kursus. Den første løsning, vi kan komme på, er at oprette et Array:
index.cs
123456using System; class Program { string[] studentNames = new string[50]; }
Hvis der på et tidspunkt er mere end 50 studerende, vil vi ikke kunne gemme deres navne. Tilsvarende, hvis der er færre end 50 studerende, vil de tomme pladser i arrayet være spild af hukommelse – dette bliver et problem, især i meget store arrays.
Her har vi brug for en ny struktur, som kan gemme et variabelt antal elementer. Heldigvis findes en sådan struktur allerede, den kaldes en List.
Lists minder meget om Arrays, men antallet af elementer, der gemmes i en liste, kan ændres.

Det er muligt at ændre eksisterende elementer i et Array, men vi kan ikke tilføje nye poster til det.
Følgende er syntaksen for at erklære en tom liste:

Ved at bruge denne syntaks kan vi oprette en liste til at gemme elevernes navne:
index.cs
12345678910using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); } }
Det er vigtigt at bemærke, at vi skal importere modulet Generic
for at kunne bruge Lists.
index.cs
1using System.Collections.Generic;
Du skal blot tilføje denne linje under using System;
for at importere det nødvendige modul.
Add()-metoden
Vi kan tilføje elementer til en liste ved at bruge Add
-metoden:
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); } }
Koden ovenfor vil tilføje fire elementer til students
-listen.
Ligesom et array af typen string
kun kan indeholde string
-elementer, kan en liste af typen string
kun acceptere string
-elementer.
Indeksering
Det første element er Anna
, derfor vil det have indekset 0
, mens Laura
vil have indekset 1
og så videre. Elementer i en liste kan tilgås via indeksering ligesom i et array:
index.cs
1234567891011121314151617using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); } }
Count()-metoden
Længden af en liste kan hentes ved hjælp af dens Count
-attribut:
index.cs
123456789101112131415161718using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); Console.WriteLine(students.Count); } }
Dynamisk længde
Bemærk, at længden af en liste er dynamisk (ændrer sig), så den ændres, når vi tilføjer elementer:
index.cs
1234567891011121314151617181920using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); Console.WriteLine(students.Count); students.Add("Anna"); Console.WriteLine(students.Count); students.Add("Laura"); Console.WriteLine(students.Count); students.Add("Jacob"); Console.WriteLine(students.Count); students.Add("Aron"); Console.WriteLine(students.Count); } }
Initialisering
Vi kan også initialisere en liste med nogle elementer ved at bruge følgende syntaks:
List<dataType> listName = new List<dataType>{ element1, element2, … };
index.cs
12345678910111213141516using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; // It is still possible to add additional elements after initialization students.Add("Markus"); Console.WriteLine(students.Count); Console.WriteLine(students[4]); } }
Gennemløb af lister
Gennemløb af en liste på samme måde som ved Arrays
Brug af for-løkke
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; for (int i = 0; i < students.Count; i++) { Console.WriteLine(students[i]); } } }
Brug af en foreach-løkke
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; foreach (string studentName in students) { Console.WriteLine(studentName); } } }
For at forkorte deklarationssyntaksen kan vi også bruge implicit deklaration. Til sammenligning er en eksplicit deklaration når vi angiver datatypen under variabeldeklarationen.
index.cs
1float number = 7.9f;
På den anden side kan vi i implicit deklaration blot bruge nøgleordet var
, og compileren udleder automatisk variablens datatype ud fra den tildelte værdi:
index.cs
1var number = 7.9f;
Vi kan også bruge implicit deklaration, når vi erklærer lister:
index.cs
1var numbers = new List<int> { 1, 2, 3, 4, 5 };
1. Hvad vil outputtet af følgende kode være:
2. Hvilket modul skal importeres for at bruge lister?
3. Hvilken metode bruges til at hente størrelsen (længden) af en liste?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 2.04
Hvad er Lister?
Stryg for at vise menuen

Forestil dig en situation, hvor vi ønsker at gemme navnene på alle de studerende, der deltager i et bestemt kursus. Den første løsning, vi kan komme på, er at oprette et Array:
index.cs
123456using System; class Program { string[] studentNames = new string[50]; }
Hvis der på et tidspunkt er mere end 50 studerende, vil vi ikke kunne gemme deres navne. Tilsvarende, hvis der er færre end 50 studerende, vil de tomme pladser i arrayet være spild af hukommelse – dette bliver et problem, især i meget store arrays.
Her har vi brug for en ny struktur, som kan gemme et variabelt antal elementer. Heldigvis findes en sådan struktur allerede, den kaldes en List.
Lists minder meget om Arrays, men antallet af elementer, der gemmes i en liste, kan ændres.

Det er muligt at ændre eksisterende elementer i et Array, men vi kan ikke tilføje nye poster til det.
Følgende er syntaksen for at erklære en tom liste:

Ved at bruge denne syntaks kan vi oprette en liste til at gemme elevernes navne:
index.cs
12345678910using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); } }
Det er vigtigt at bemærke, at vi skal importere modulet Generic
for at kunne bruge Lists.
index.cs
1using System.Collections.Generic;
Du skal blot tilføje denne linje under using System;
for at importere det nødvendige modul.
Add()-metoden
Vi kan tilføje elementer til en liste ved at bruge Add
-metoden:
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); } }
Koden ovenfor vil tilføje fire elementer til students
-listen.
Ligesom et array af typen string
kun kan indeholde string
-elementer, kan en liste af typen string
kun acceptere string
-elementer.
Indeksering
Det første element er Anna
, derfor vil det have indekset 0
, mens Laura
vil have indekset 1
og så videre. Elementer i en liste kan tilgås via indeksering ligesom i et array:
index.cs
1234567891011121314151617using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); } }
Count()-metoden
Længden af en liste kan hentes ved hjælp af dens Count
-attribut:
index.cs
123456789101112131415161718using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); students.Add("Anna"); students.Add("Laura"); students.Add("Jacob"); students.Add("Aron"); Console.WriteLine(students[2]); Console.WriteLine(students.Count); } }
Dynamisk længde
Bemærk, at længden af en liste er dynamisk (ændrer sig), så den ændres, når vi tilføjer elementer:
index.cs
1234567891011121314151617181920using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string>(); Console.WriteLine(students.Count); students.Add("Anna"); Console.WriteLine(students.Count); students.Add("Laura"); Console.WriteLine(students.Count); students.Add("Jacob"); Console.WriteLine(students.Count); students.Add("Aron"); Console.WriteLine(students.Count); } }
Initialisering
Vi kan også initialisere en liste med nogle elementer ved at bruge følgende syntaks:
List<dataType> listName = new List<dataType>{ element1, element2, … };
index.cs
12345678910111213141516using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; // It is still possible to add additional elements after initialization students.Add("Markus"); Console.WriteLine(students.Count); Console.WriteLine(students[4]); } }
Gennemløb af lister
Gennemløb af en liste på samme måde som ved Arrays
Brug af for-løkke
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; for (int i = 0; i < students.Count; i++) { Console.WriteLine(students[i]); } } }
Brug af en foreach-løkke
index.cs
123456789101112131415using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<string> students = new List<string> { "Anna", "Laura", "Jacob", "Aron" }; foreach (string studentName in students) { Console.WriteLine(studentName); } } }
For at forkorte deklarationssyntaksen kan vi også bruge implicit deklaration. Til sammenligning er en eksplicit deklaration når vi angiver datatypen under variabeldeklarationen.
index.cs
1float number = 7.9f;
På den anden side kan vi i implicit deklaration blot bruge nøgleordet var
, og compileren udleder automatisk variablens datatype ud fra den tildelte værdi:
index.cs
1var number = 7.9f;
Vi kan også bruge implicit deklaration, når vi erklærer lister:
index.cs
1var numbers = new List<int> { 1, 2, 3, 4, 5 };
1. Hvad vil outputtet af følgende kode være:
2. Hvilket modul skal importeres for at bruge lister?
3. Hvilken metode bruges til at hente størrelsen (længden) af en liste?
Tak for dine kommentarer!