C# Collections Tutorial med eksempler
โก Smart opsummering
Samlinger i C# giver en fleksibel mรฅde at gemme og administrere grupper af objekter pรฅ. I modsรฆtning til arrays vokser og krymper samlinger under kรธrsel, og navnerummene System.Collections og System.Collections.Generic leverer fรฆrdige typer til lister, ordbรธger, stakke og kรธer.

I vores tidligere selvstudie har vi lรฆrt om, hvordan vi kan bruge arrays i C#. Lad os fรฅ et hurtigt overblik over det. Arrays i programmering bruges til at gruppere et sรฆt relaterede objekter. Sรฅ man kunne oprette en matrix eller et sรฆt af heltal, som kunne tilgรฅs via รฉt variabelnavn.
Hvad er samlinger i C#?
Samlinger ligner Arrays, giver det en mere fleksibel mรฅde at arbejde med en gruppe af objekter pรฅ.
I arrays ville du have bemรฆrket, at du pรฅ forhรฅnd skal definere antallet af elementer i et array. Dette skulle gรธres, da arrayet blev deklareret.
Men i en samling behรธver du ikke pรฅ forhรฅnd at definere samlingens stรธrrelse. Du kan tilfรธje elementer eller endda fjerne elementer fra samlingen pรฅ et hvilket som helst tidspunkt. Dette kapitel vil fokusere pรฅ, hvordan vi kan arbejde med de forskellige samlinger, der er tilgรฆngelige i C#.
System.Collections Klasser
.NET Framework grupperer de originale ikke-generiske samlingsklasser i navnerummet System.Collections. Tabellen nedenfor opsummerer de primรฆre typer, du kan bruge med det samme.
| Kollektion | Beskrivelse |
| ArrayList | ArrayList-samlingen ligner Arrays datatype i C#. Den stรธrste forskel er den dynamiske karakter af array-listesamlingen. |
| Stak | Stakken er en specialcase-samling, der reprรฆsenterer et sidst ind, fรธrst ud (LIFO)-koncept. |
| kรธer | Kรธen er en specialcase-kollektion, der reprรฆsenterer et fรธrst ind, fรธrst ud-koncept. |
| hashtabelsamling | En hashtabel er en sรฆrlig samling, der bruges til at gemme nรธglevรฆrdielementer. |
| Sorteret Liste | SortedList er en samling, der som standard gemmer nรธgle-vรฆrdi-par i stigende rรฆkkefรธlge efter nรธgle. |
| BitArray | En bit-array er en matrix af datastruktur, som gemmer bits. |
Generiske samlinger i C#
De ikke-generiske klasser ovenfor gemmer hvert element som et generelt objekt, hvilket betyder, at compileren ikke kan kontrollere typen, og programmet betaler en lille omkostning for at sรฆtte vรฆrdier i boks. For at lรธse dette tilfรธjede C# navnerummet System.Collections.Generic, hvor hver samling er bundet til รฉn deklareret type.
En generisk samling som f.eks. Liste accepterer kun strenge, sรฅ fejl opdages ved kompilering, og der er ikke behov for casting, nรฅr du lรฆser et element tilbage. Dette gรธr generiske samlinger sikrere, hurtigere og nemmere at lรฆse, hvilket er grunden til, at de er standardvalget i moderne C#-kode.
De mest almindelige generiske samlinger er anfรธrt nedenfor:
- Liste : En indeksbaseret liste, der kan tilpasses i stรธrrelse, den generiske erstatning for ArrayList.
- Ordbog : Gemmer nรธgle-vรฆrdi-par med hurtige, hash-baserede opslag.
- HashSet : Indeholder kun unikke vรฆrdier og understรธtter sรฆtoperationer sรฅsom forening.
- Kรธ : En fรธrst ind, fรธrst ud-kollektion, den generiske version af Queue.
- Stak : En "sidst ind, fรธrst ud"-kollektion, den generiske version af Stack.
- Sorteret liste : Holder nรธgle-vรฆrdi-par sorteret efter nรธgle i stigende rรฆkkefรธlge.
Eksempel pรฅ C#-listesamling
Listen er den mest anvendte generiske samling, fordi den opfรธrer sig som et dynamisk array. Eksemplet nedenfor opretter en liste med strenge, tilfรธjer og fjerner elementer, lรฆser dens stรธrrelse og udskriver derefter de resterende vรฆrdier. Al koden er skrevet i Program.cs-filen.
Trin 1) Importer navneomrรฅdet System.Collections.Generic, og deklarer en liste over strenge.
Trin 2) Tilfรธj elementer med Tilfรธj-metoden, og slet et med Fjern-metoden.
Trin 3) Lรฆs egenskaben Count, og gennemgรฅ derefter listen med en foreach-sรฆtning.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code Forklaring:-
- Navneomrรฅdet System.Collections.Generic importeres, sรฅ List-typen er tilgรฆngelig for programmet.
- En ny liste kaldet tutorials oprettes, og tre navne tilfรธjes med Add-metoden.
- Fjernelsesmetoden sletter vรฆrdien "Python", hvilket efterlader to punkter pรฅ listen.
- Egenskaben Count returnerer antallet af elementer, og foreach-lรธkken udskriver hver resterende vรฆrdi i rรฆkkefรธlge.
Nรฅr programmet kรธrer, udskriver det fรธrst antallet af 2, efterfulgt af Java og Kotlin pรฅ separate linjer. Dette viser, hvordan en samling รฆndrer sin stรธrrelse under kรธrsel, noget et fast array ikke kan.
Forskellen mellem arrays og samlinger i C#
Bรฅde en matrix og en samling grupperer relaterede elementer under รฉt navn, men de opfรธrer sig forskelligt, nรฅr programmet kรธrer. At vide, hvornรฅr man skal bruge hver enkelt, hjรฆlper dig med at skrive renere og mere effektiv kode.
De vigtigste forskelle er anfรธrt nedenfor:
- Stรธrrelse: Et array har en fast lรฆngde, der er angivet ved deklarationen, mens en samling kan vokse eller krympe nรฅr som helst.
- Typehรฅndtering: Et array gemmer en enkelt type, hvorimod en samling kan vรฆre typesikker med generiske objekter eller indeholde objekter af blandede typer, nรฅr de ikke er generiske.
- Beliggenhed: Arrays er indbygget i sproget, mens samlingsklasser findes i navnerummene System.Collections og System.Collections.Generic.
- Indbyggede operationer: Samlinger tilbyder fรฆrdige metoder til at tilfรธje, fjerne, sรธge og sortere elementer, mens arrays kun giver grundlรฆggende indekseret adgang.
- Bedste brug: Vรฆlg et array, nรฅr antallet af elementer er kendt og fast, og en samling, nรฅr antallet รฆndrer sig, mens programmet kรธrer.
Kort sagt er arrays bedst til data med fast stรธrrelse, mens samlinger giver den fleksibilitet, som de fleste virkelige applikationer har brug for.
