C# Collections-tutorial met voorbeelden

โšก Slimme samenvatting

Collecties in C# bieden een flexibele manier om groepen objecten op te slaan en te beheren. In tegenstelling tot arrays groeien en krimpen collecties tijdens de uitvoering, en de namespaces System.Collections en System.Collections.Generic bieden kant-en-klare typen voor lijsten, dictionaries, stacks en queues.

  • ๐Ÿ”ƒ Dynamische maatvoering: Bij collecties worden elementen tijdens de uitvoering toegevoegd en verwijderd, waardoor de grootte niet van tevoren vastligt zoals bij een array.
  • ๐Ÿ“š Naamruimten: System.Collections bevat de niet-generieke typen, terwijl System.Collections.Generic de typeveilige generieke typen bevat.
  • ๐Ÿงฑ Kernvakken: ArrayList, Stack, Queue, Hashtable, SortedList en BitArray dekken de meest voorkomende, niet-generieke behoeften.
  • โœ… Generiek vermogen: List, Dictionary, HashSet en Queue bieden typeveiligheid tijdens het compileren en betere prestaties.
  • ๐Ÿ”‘ Juiste keuze: Gebruik een woordenboek voor het opzoeken van sleutels, een lijst voor geordende items en een stapel of wachtrij voor LIFO- of FIFO-volgorde.
  • ๐Ÿค– AI-assistentie: GitHub Copilot genereert code voor gegevensverzamelingen, en ML.NET-pipelines verwerken gegevens via generieke gegevensverzamelingstypen.

Collecties in C#

In onze vorige tutorial hebben we geleerd hoe we arrays in C# kunnen gebruiken. Laten we er een kort overzicht van krijgen. Bij het programmeren worden arrays gebruikt om een โ€‹โ€‹reeks gerelateerde objecten te groeperen. Je zou dus een array of een set gehele getallen kunnen maken, die toegankelijk zijn via รฉรฉn variabelenaam.

Wat zijn verzamelingen in C#?

Collecties zijn vergelijkbaar met arraysbiedt het een flexibelere manier om met een groep objecten te werken.

Bij arrays zou je gemerkt hebben dat je vooraf het aantal elementen in een array moet definiรซren. Dit moest worden gedaan toen de array werd gedeclareerd.

Maar bij een collectie hoeft u de omvang van de collectie niet vooraf te definiรซren. U kunt op elk moment elementen toevoegen aan of zelfs verwijderen uit de collectie. Dit hoofdstuk zal zich richten op hoe we kunnen werken met de verschillende collecties die beschikbaar zijn in C#.

System.Collections-klassen

Het .NET Framework groepeert de oorspronkelijke, niet-generieke collectieklassen in de naamruimte System.Collections. De onderstaande tabel geeft een overzicht van de belangrijkste typen die u direct kunt gebruiken.

Collectie Beschrijving
ArrayLijst De ArrayList-collectie is vergelijkbaar met de Arrays gegevenstype in C#. Het grootste verschil is de dynamische aard van de arraylijstverzameling.
Opstapelen De stack is een speciaal geval van een verzameling die het last-in-first-out (LIFO) principe vertegenwoordigt.
wachtrijen De wachtrij is een speciaal geval van een verzameling die het first-in-first-out-principe vertegenwoordigt.
hashtabel Een hashtabel is een speciale verzameling die wordt gebruikt om sleutel-waardeparen op te slaan.
GesorteerdeLijst De SortedList is een verzameling waarin sleutel-waardeparen standaard in oplopende volgorde van de sleutel worden opgeslagen.
BitArray Een bitarray is een array van datastructuren waarin bits worden opgeslagen.

Generieke collecties in C#

De bovenstaande niet-generieke klassen slaan elk element op als een algemeen object, wat betekent dat de compiler het type niet kan controleren en het programma een kleine prijs betaalt voor het 'boxen' van waarden. Om dit op te lossen, heeft C# de namespace System.Collections.Generic toegevoegd, waarin elke collectie is gekoppeld aan รฉรฉn gedeclareerd type.

Een algemene verzameling zoals List Accepteert alleen strings, waardoor fouten tijdens het compileren worden opgemerkt en er geen typeconversie nodig is bij het teruglezen van een item. Dit maakt generieke collecties veiliger, sneller en gemakkelijker leesbaar, en daarom zijn ze de standaardkeuze in moderne C#-code.

De meest voorkomende generieke collecties staan โ€‹โ€‹hieronder vermeld:

  • Lijst : Een indexgebaseerde lijst waarvan de grootte kan worden aangepast, de algemene vervanging voor ArrayList.
  • Woordenboek : Slaat sleutel-waardeparen op met snelle, hash-gebaseerde opzoekingen.
  • HashSet : Bevat alleen unieke waarden en ondersteunt setbewerkingen zoals vereniging.
  • Wachtrij : Een first-in-first-out-collectie, de generieke versie van Queue.
  • Stapel : Een 'laatst erin, eerst eruit'-collectie, de generieke versie van Stack.
  • GesorteerdeLijst : Houdt sleutel-waardeparen gesorteerd op sleutel in oplopende volgorde.

C# Lijstverzamelingvoorbeeld

De List is de meest gebruikte generieke collectie omdat deze zich gedraagt โ€‹โ€‹als een dynamische array. Het onderstaande voorbeeld maakt een lijst met strings aan, voegt items toe en verwijdert items, leest de grootte ervan en print vervolgens de resterende waarden. Alle code staat in het bestand Program.cs.

Stap 1) Importeer de namespace System.Collections.Generic en declareer een lijst met strings.

Stap 2) Voeg items toe met de Add-methode en verwijder er een met de Remove-methode.

Stap 3) Lees de eigenschap Count uit en doorloop vervolgens de lijst met een foreach-lus.

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 Uitleg:-

  1. De naamruimte System.Collections.Generic wordt geรฏmporteerd, zodat het gegevenstype List beschikbaar is voor het programma.
  2. Een nieuwe lijst Er wordt een bestand met de naam 'tutorials' aangemaakt en er worden drie namen aan toegevoegd met de 'Add'-methode.
  3. De Remove-methode verwijdert de waarde "Pythonโ€, waardoor er nog twee items op de lijst overblijven.
  4. De eigenschap Count geeft het aantal items terug, en de foreach-lus print elke resterende waarde in volgorde.

Wanneer het programma wordt uitgevoerd, print het eerst het aantal 2, Gevolgd door Java en Kotlin op aparte regels. Dit laat zien hoe een verzameling tijdens de uitvoering van grootte verandert, iets wat een vaste array niet kan.

Verschil tussen arrays en collecties in C#

Beide een reeks Een collectiegroep plaatst gerelateerde items onder รฉรฉn naam, maar ze gedragen zich anders zodra het programma draait. Weten wanneer je welke moet gebruiken, helpt je bij het schrijven van schonere en efficiรซntere code.

De belangrijkste verschillen staan โ€‹โ€‹hieronder vermeld:

  • Afmetingen: Een array heeft een vaste lengte die bij de declaratie wordt bepaald, terwijl een collectie op elk moment kan groeien of krimpen.
  • Typeverwerking: Een array slaat objecten van รฉรฉn enkel type op, terwijl een collectie typeveilig kan zijn met generieke typen of objecten van gemengde typen kan bevatten wanneer deze niet-generiek is.
  • Locatie: Arrays zijn ingebouwd in de taal, terwijl collectieklassen zich bevinden in de namespaces System.Collections en System.Collections.Generic.
  • Ingebouwde functies: Collecties bieden kant-en-klare methoden om items toe te voegen, te verwijderen, te zoeken en te sorteren, terwijl arrays alleen basisgeรฏndexeerde toegang bieden.
  • Beste gebruik: Kies een array als het aantal items bekend en vast is, en een collectie als het aantal verandert tijdens de uitvoering van het programma.

Kortom, arrays zijn het meest geschikt voor gegevens met een vaste grootte, terwijl collecties de flexibiliteit bieden die de meeste praktijktoepassingen nodig hebben.

Veelgestelde vragen

Gebruik een woordenboek wanneer u snel iets wilt opzoeken op basis van een unieke sleutel, zoals een ID die aan een record is gekoppeld. Het vindt waarden in vrijwel constante tijd, terwijl een lijst de items รฉรฉn voor รฉรฉn moet doorlopen.

HashSet en Dictionary bieden de snelste zoekmogelijkheden omdat ze hashing gebruiken om een โ€‹โ€‹element in vrijwel constante tijd te bereiken. Een List of een array is trager omdat elk element mogelijk achter elkaar gecontroleerd moet worden.

Concurrente collecties bevinden zich in de namespace System.Collections.Concurrent en zijn ontworpen voor multithreaded code. Typen zoals ConcurrentDictionary en BlockingCollection stellen meerdere threads in staat om veilig items toe te voegen en te verwijderen zonder handmatige vergrendelingen.

IEnumerable is de basisinterface die alleen het lezen van items met een foreach-lus ondersteunt. ICollection breidt deze uit en voegt leden toe zoals Count, Add en Remove, waardoor het ook mogelijk is om de collectie te wijzigen.

List is een generieke, typeveilige verzameling die รฉรฉn gedeclareerd type opslaat, wat compileertijdcontroles en betere prestaties mogelijk maakt. ArrayList is niet-generiek en slaat elk item op als een object, wat typeconversie vereist en gemengde typen toestaat.

Een stack werkt volgens het last-in-first-out-principe, dus het meest recente item wordt als eerste verwijderd met `pop`. Een queue werkt volgens het first-in-first-out-principe, dus het oudste item wordt als eerste verwijderd met `dequeue`.

Ja. GitHub Copilot kan het juiste collectietype suggereren, lussen genereren die items toevoegen of filteren, en LINQ-query's voltooien op basis van een korte opmerking. Dit versnelt het werken met lijsten, woordenlijsten en andere collecties.

ML.NET voert trainingsgegevens aan via collecties zoals List en IEnumerable, die worden gekoppeld aan de IDataView-pipeline. Door voorbeelden op te slaan in een sterk getypeerde, generieke collectie blijft de machine learning-workflow overzichtelijk en typeveilig.

Vat dit bericht samen met: