Wat is een Dictionary?

Een Dictionary is een datatype dat wordt gebruikt om data op te slaan in sleutel-waarde paren. In een Dictionary is elke sleutel uniek, en elke sleutel wijst naar een waarde. Dit maakt Dictionaries ideaal voor situaties waar je snel gegevens wilt opzoeken op basis van een specifieke sleutel.

Casus

Stel, je hebt een lijst van studenten met hun bijbehorende cijfers en je wilt snel het cijfer van een specifieke student opzoeken. In plaats van door een lijst van objecten te itereren, kun je een Dictionary gebruiken waarbij de studentnamen de sleutels zijn en hun cijfers de waarden.

Hoe zit een Dictionary in elkaar?

Een Dictionary bestaat uit twee hoofdcomponenten: de sleutel en de waarde. De sleutel wordt gebruikt om de waarde te identificeren, en de waarde is de informatie die aan die sleutel is gekoppeld. Een Dictionary kan efficiënt zoeken en ophalen van waarden, omdat het gebruik maakt van een zogenaamde “hash table” structuur.

Codevoorbeeld

Dictionary<string, int> studentenCijfers = new Dictionary<string, int>();
studentenCijfers.Add("Jan", 8);
studentenCijfers.Add("Pieter", 6);
studentenCijfers.Add("Maria", 9);

In dit voorbeeld wordt een Dictionary gemaakt waarin de sleutels van type string (studentnamen) zijn en de waarden van type int (cijfers). De Add methode wordt gebruikt om de gegevens toe te voegen. Een Dictionary maakt gebruik van hashing om snelle zoek- en opvraagacties mogelijk te maken. Elke sleutel moet uniek zijn, maar waarden kunnen wel worden herhaald.

Een Dictionary kan van elk type zijn, zoals bijvoorbeeld: Dictionary<string, int> waarbij de sleutel een string is en de waarde een int.

Hoe gebruik je een Dictionary?

Een Dictionary wordt voornamelijk gebruikt wanneer je gegevens wilt opslaan die snel op basis van een sleutel moeten worden opgezocht. Het is zeer nuttig in situaties waar de prestaties van toegang en zoekopdrachten belangrijk zijn, zoals bij het implementeren van caches of het bijhouden van configuratie-instellingen.

Alternatieven voor een Dictionary zijn bijvoorbeeld lijsten of arrays, maar die bieden geen directe toegang via een sleutel en zijn dus minder efficiënt voor deze toepassingen.

Casus

Stel je voor dat je een systeem ontwikkelt waarbij je de voorraad van een winkel bijhoudt. Elke productnaam is de sleutel, en de voorraadhoeveelheid is de waarde. Je wilt snel het aantal stuks van een bepaald product opzoeken, en een Dictionary is de ideale keuze.

Mogelijke uitwerking van de casus

Dictionary<string, int> productVoorraad = new Dictionary<string, int>();
productVoorraad.Add("Appels", 150);
productVoorraad.Add("Bananen", 80);
productVoorraad.Add("Perziken", 120);
 
// Toegang tot voorraad van een specifiek product
int appelsVoorraad = productVoorraad["Appels"];
Console.WriteLine($"Er zijn {appelsVoorraad} appels op voorraad.");

In dit voorbeeld wordt de voorraad van verschillende producten bijgehouden in een Dictionary. De voorraad kan snel worden opgevraagd door de naam van het product te gebruiken als sleutel.

Bewerkingen op de Dictionary

Add

Add kan worden gebruikt om een key-value paar toe te voegen aan een Dictionary

Dictionary<string, int> ages = new Dictionary<string, int>();
 
ages.Add("Alice", 30);
ages.Add("Bob", 25);
 
Console.WriteLine(ages["Alice"]); // Output: 30

ContainsKey

ContainsKey kan gebruikt worden om te valideren of een sleutel in een Dictionary zit

Dictionary<string, int> ages = new Dictionary<string, int>();
 
ages.Add("Alice", 30);
ages.Add("Bob", 25);
 
Console.WriteLine(ages.ContainsKey("Alice")); // Output: True
Console.WriteLine(ages.ContainsKey("Carol")); // Output: False

Count

Count kan gebruikt worden om het aantal key-value paren te weten van een Dictionary

Dictionary<string, int> ages = new Dictionary<string, int>();
 
ages.Add("Alice", 30);
ages.Add("Bob", 25);
 
Console.WriteLine(ages.Count); // Output: 2

Remove

Remove kan gebruikt worden om een key-value paar uit een Dictionary te verwijderen

Dictionary<string, int> ages = new Dictionary<string, int>();
 
ages.Add("Alice", 30);
ages.Add("Bob", 25);
 
ages.Remove("Bob");
 
Console.WriteLine(ages.Count); // Output: 1
Console.WriteLine(ages.ContainsKey("Bob")); // Output: False
 

Keys

Keys kan gebruikt worden om de lijst van sleutels op te halen in de Dictionary

Dictionary<string, int> ages = new Dictionary<string, int>();
 
ages.Add("Alice", 30);
ages.Add("Bob", 25);
 
foreach (string key in ages.Keys)
{
    Console.WriteLine(key); 
}
// Output: 
// Alice
// Bob

Values

Values kan gebruikt worden om alle values uit een Dictionary op te halen

Dictionary<string, int> ages = new Dictionary<string, int>();
 
ages.Add("Alice", 30);
ages.Add("Bob", 25);
 
foreach (int value in ages.Values)
{
    Console.WriteLine(value); 
}
// Output: 
// 30
// 25

Volgende stap: Stappen Dictionary