C# Dictionary

c# dictionary

Was ist ein C# Dictionary?

Wenn du relativ neu in der Welt der C# Programmierung bist, dann ist es sehr wahrscheinlich, dass du mit dem C# Dictionary etwas überfragt bist. Aber keine Sorge, im Laufe dieses Artikels wirst du sehr viel über C# Dictionaries lernen und verstehen, wie du sie verwenden kannst und solltest.

Am Ende dieses Artikels findest du auch praktische Beispiele zum Thema C# Dictionary, eine Übungsaufgabe und ein Quiz zu diesem Thema. Lies diesen Artikel also auf jeden Fall bis zum Ende.

Im Grunde sind Dictionaries eine Möglichkeit um Werte bzw. Schlüssel-Wert-Paare (key-value-pairs) zu speichern. Der Schlüssel wird verwendet, um den Wert nachzuschlagen, der von einem einfachen Datentyp wie int oder string bis hin zu einem komplexeren Objekt reichen kann (mehr dazu weiter unten).

So erstellst du ein C# Dictionary

Du kannst die Klasse Dictionary (using System.Collections.Generic) verwenden um ein Dictionary zu erstellen, wobei TKey für den Typ des Schlüssels und TValue für den Typ des Wertes steht.

Mit new Dictionary<string, int>() erstellst du hier im Beispiel ein neues Dictionary. Mit der Methode Add() kannst du Elemente hinzufügen. Diese Methode benötigt zwei Parameter:

  1. Den Schlüssel
  2. Den Wert

Im folgenden Beispiel fügen wir dem Dictionary dict drei Key-Value-Pairs (Schlüssel-Werte-Paare) hinzu:

// Dieses Dictionary kannst ein string-int Werte-Paar speichern
Dictionary<string, int> dict = new Dictionary<string,int>();
dict.Add("Eins", 1);
dict.Add("Zwei", 2);
dict.Add("Drei", 3);

Damit du den Aufbau von einem C# Dictionary noch besser verstehst, habe ich hier zwei Beispiele für dich. Das erste Beispiel ist für einen Tierarzt <string, string> für <name, tierart>:

C# Dictionary

Das zweite Beispiel ist für einen Supermarkt <string, float> für <produkt, preis>:

C# Dictionary

Wichtig: Du kannst jeden Datentyp für den Key und auch für den Value verwenden. In dem obigen Beispiel verwenden wir einen string für den Key und einen int für den Value. Hier sind noch weitere Beispiele (wie gesagt, alle Datentypen sind möglich):

Dictionary<string, int> dict = new Dictionary<string, int>();

Dictionary<int, int> dict = new Dictionary<int, int>();

Dictionary<string, string> dict = new Dictionary<string, string>();

Dictionary<float, int> dict = new Dictionary<float, int>();

Dictionary<float, string> dict = new Dictionary<float, string>();

// Hier auch mit einer eigenen Klasse "Car"
Dictionary<int, Car> dict = new Dictionary<int, Car>();
C# Dictionary

Hinweis: Auch komplexe Datentypen (zum Beispiel deine eigenen Klassen) kannst du als Key oder auch als Value verwenden (siehe obige Grafik)!

Mit der Methode ToDictionary() kannst du auch ein Wörterbuch aus einer vorhandenen Liste erstellen. Dies ist nützlich, wenn du eine Liste oder einen Array von Objekten hast, die du schnell nach einer Eigenschaft durchsuchen möchtest.

var list = new List();

list.Add(new MyObject { Id = 1, Name = "One" });
list.Add(new MyObject { Id = 2, Name = "Zwei" });
list.Add(new MyObject { Id = 3, Name = "Drei" });

var dict = list.ToDictionary(x => x.Id);

Wert im C# Dictionary ändern

Nachdem du ein neues Element im Dictionary erstellt hast, kannst du den Wert im nachhinein ganz einfach ändern. Dafür verwendest du einfach den dazugehörigen Key:

// Dictionary erstellen
Dictionary<string, int> dict = new Dictionary<string,int>(); 

// Element (Key-Value Pair) hinzufügen
dict.Add("Eins", 1); 

Console.WriteLine(dict["Eins]); // 1

// Wert ändern (Zugriff durch Key/Schlüssel)
dict["Eins"] = 100;

Console.WriteLine(dict["Eins]); // 100

Werte eines C# Dictionary auslesen

Sobald du ein C# Dictionary hast, kannst du mit dem Indexer die Werte nach Schlüssel suchen.

var wert = dict["Eins"]; // Value = 1

Du kannst auch die Methode TryGetValue() verwenden, um einen Wert zu suchen, die ein bool zurückgibt, um anzuzeigen, ob der Schlüssel gefunden wurde. Dies ist nützlich, wenn du nicht sicher bist, ob ein Schlüssel im Dictionary existiert.

var value = 0;

if (dict.TryGetValue("One", out value))
{
   // Der Schlüssel wurde gefunden
}
else {
   // Schlüssel nicht gefunden
}

Du kannst auch mit einer foreach-Schleife über die Schlüssel/Wert-Paare in einem Diktat iterieren.

foreach (var kvp in dict)
{
   var key = kvp.Key;
   var wert = kvp.Wert;
}

Du kannst auch nur über die Schlüssel oder Werte iterieren, indem du die Eigenschaften Keys oder Values verwendest.

foreach (var key in dict.Keys)
{
   //
}

foreach (var wert in dict.Values)
{
   //
}

Schließlich kannst du die Methoden ContainsKey() und ContainsValue() verwenden, um zu prüfen, ob ein Wörterbuch einen bestimmten Schlüssel oder Wert enthält.

if (dict.ContainsKey("One"))
{
   //
}

if (dict.ContainsValue(1))
{
   //
}

Das sind die Grundlagen der Arbeit mit Dictionaries in C#. Wie du sehen kannst, sind sie eine sehr mächtige und nützliche Datenstruktur um komplexere Programme und Algorithmen zu entwickeln.

Es gibt noch ein paar weitere Methoden (Funktionen) in der Dictionary Klasse. Eine exakte Auflistung findest du hier.

Anwendungsbeispiele für C# Dicitionaries

Beispiel 1: Eine Wörterbuch App

Ein möglicher Anwendungsfall für ein C# Dictionary wäre, ein für eine “Wörterbuch-App”. In diesem Fall speicherst du als Key den deutschen Werte und als Value den Englischen:

Dictionary<string, string> dictionary = new Dictionary<string, string>();

dictionary.Add("Hund", "Dog");
dictionary.Add("Katze", "Cat");
dictionary.Add("Maus", "Mouse");

Beispiel 2: Vorratslager

In diesem Beispiel verwenden wir ein C# Dictionary um ein potentielles Warenlager eines “Sneaker-Ladens” abzubilden. Hier kauft ein Besucher einen spezifischen Schuh, dieser wird dann im Lager aufgesucht und die vorhandene Anzahl im Lager um Eins reduziert:

Dictionary<string, int> stock = new Dictionary<string, int>();

stock.Add("Adidas Stan Smith", "3");
stock.Add("Nike Air Force", "11");
stock.Add("Vans Old Skool", "7");

// Besucher kauft Schuh
int oldValue = 0;
string key = "Vans Old Skool";

if (dict.TryGetValue(key, out value))
{
   // Der Schlüssel wurde gefunden, Schuhanzahl im Lager reduzieren
   dictionary[key] = value--; 
}

Beispiel 3: Universität

Eine Universität sollte im besten Fall natürlich viele Studenten immatrikuliert haben. In dem folgenden Beispiel verwenden wir ein Dictionary mit einer eigenen Klasse Student um komplexere Informationen zu speichern und am Ende den NC eines jeden Studenten auszulesen:

public class Student {
   public Guid studentId; // Guid is like a unique integer
   public string preName;
   public string surName;
   public int nc;
}

// In der program Klasse
// In dessen Main Methode:

Dictionary<Guid, Student> students = new Dictionary<Guid, Student>();

// Student 1
Guid id = Guid.NewGuid();
students.Add(id , new Student(
                  {
                     studentId= id,
                     preName= "Jannick", 
                     surName= "Leismann",
                     nc= 1.0f
                  });

// Student 2
id = Guid.NewGuid();
students.Add(id , new Student(
                  {
                     studentId= id, 
                     preName= "John",
                     surName= "Doe",
                     nc= 2.1f
                  });

// Den NC aller Studenten auslesen
foreach (Student student in students.Values)
{
   Console.WriteLine(string.Format("{0} {1} hat einen NC von {2}",
                    student.preName, student.surName, student.nc ));
}

Teste dein Wissen! Das C# Dictionary Quiz

Willkommen zum C# Dictionary Quiz!

Wie nennt man die Elemente eines Dictionaries?

Mit welcher Methode kannst du die Existenz und den Wert eines Eintrages aus einem Dictionary abfragen?

Welche Methode verwendest du, um neue Elemente zum Dictionary hinzuzufügen?

Kannst du komplexe Datentypen (z.B. deine eigenen Klassen) für den Typ eines Dictionaries verwenden?

Welche Zeile Code ist hier richtig?

Welche Zeile Code ist hier richtig?

Worauf solltest du beim verwenden eines C# Dictionaries immer achten?

Programmierübungen für dich

Zum warm werden:

  1. Erstelle ein C# Dictionary mit Schlüssel-Wert-Paaren (key-value-pairs) der Datentypen int und string
  2. Füge Elemente zu dem Dictionary hinzu
  3. Durchlaufe (iteriere) das Dictionary mit einer Schleife
  4. Entferne die Werte wieder

Wenn du es richtig angehen willst:

Erstelle ein Programm mit dem du den Tierbestand eines Zoos verwalten kannst. Alle Tiere sollten nach Rasse in einem C# Dictionary gespeichert werden. Du solltest für die Tiere eine extra Klasse (z.B. Animal) erstellen. Über eine GUI/Konsole (z.B. WPF, Windows Forms oder MAUI) solltest du neue Tiere hinzufügen können, den aktuellen Bestand einer Tierart abfragen und auch Tiere aus dem Dictionary entfernen können.

Hier kannst du noch mehr über das C# Dictionary herausfinden.

Viel Spaß! Deine Lösung für die Aufgabe darfst du gerne als Kommentar teilen!

Wenn dich Dictionaries interessieren, dann solltest du auch unbedingt den Artikel über LINQ in C# lesen!

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Seite verwendet Cookies. Wir können diese zur Analyse unserer Besucherdaten platzieren, um unsere Website zu verbessern, personalisierte Inhalte anzuzeigen und Ihnen ein großartiges Website-Erlebnis zu bieten. Für weitere Informationen zu den von uns verwendeten Cookies öffnen Sie die Einstellungen.