C# Dictionary

c# dictionary

Einleitung zum C# Dictionary

In diesem umfassen Artikel lernst du ganz einfach alles, was du über das C# Dictionary wissen musst und es wird sogar noch besser!

Entdecke das Potenzial von C# und werde ein erfahrener Programmierer! Unser exklusiver Video Intensivkurs bietet dir alles, was du brauchst, um C# wie ein Pro zu beherrschen. Lerne von erfahrenen Dozenten, arbeite dich durch interaktive Übungen und Projekte und verbessere deine Fähigkeiten in Rekordzeit. Klick jetzt hier und starte deine Reise zum C#-Experten!

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.

Kurzgesagt: Was ist ein C# Dictionary?

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).

Hier habe ich eine vereinfachte Veranschaulichung eines C# Dictionaries für dich:

C# Dictionary

Die gesamte Preisliste ist in diesem Beispiel also ein Dictionary. Die Preisliste besteht Produkten und den dazu gehörigen Preisen. Eine Produkt-Preis Kombination ist hier als Key-Value-Pair gekennzeichnet, wobei das Produkt der Key ist und der Preis der Value.

Merken: Mit einem C# Dictionary kannst du, genau wie in einem Array, Werte speichern. Das besondere? Jeder Wert ist ein Key-Value-Pair und besteht aus einem Schlüssel (eng. key) und einem zugewiesenen Wert (engl. value).

Ein C# Dictionary initialisieren

Mit new Dictionary<string, int>() initialisieren (erstellen) wir im folgenden Beispiel ein neues Objekt der Klasse Dictionary mit folgender Konfiguration:

  1. Der Schlüssel (Key) soll vom Datentyp string sein
  2. Den Wert (Value) soll vom Datentyp float sein
// Dieses Dictionary kannst ein string-float Werte-Paar speichern
Dictionary<string, float> dict = new Dictionary<string,float>();

Im folgenden Beispiel fügen wir dem Dictionary dict drei Key-Value-Pairs (Schlüssel-Werte-Paare) hinzu. Dafür verwenden wir die Add() Methode der Dictionary Klasse selbst:

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

dict.Add("Mehl", 1.49f);
dict.Add("Äpfel", 3.79f);
dict.Add("Saft", 2.49f);

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.

Dictionary und foreach Schleifen

Ein C# Dictionary ist eine leistungsstarke Datenstruktur, die es ermöglicht, Werte auf Basis von Schlüsseln abzurufen. Es ist eine schnelle und effiziente Möglichkeit, um auf Elemente in einer großen Sammlung von Daten zuzugreifen.

Eine nützliche Methode, um alle Elemente in einem Dictionary zu durchlaufen, ist die Verwendung von foreach-Schleifen. Durch Verwendung von foreach-Schleifen können wir einfach auf alle Schlüssel-Wert-Paare zugreifen, die im Dictionary gespeichert sind.

Dies ist nützlich, wenn wir schnell durch eine große Anzahl von Elementen in einem Dictionary navigieren möchten, um zum Beispiel bestimmte Elemente zu finden oder bestimmte Operationen auf ihnen durchzuführen.

Hier ist ein Beispielcode, der ein Dictionary in C# iteriert und die Schlüssel und Werte jedes Elements ausgibt:

Dictionary<string, float> myDictionary = new Dictionary<string, float>();
myDictionary.Add("Mehl", 0.79f);
myDictionary.Add("Butter", 3.00f);
myDictionary.Add("Milch", 2.49f);

foreach (KeyValuePair<string, float> product in myDictionary)
{
    Console.WriteLine("Key: " + product.Key + ", Value: " + product.Value);
}

// Ausgabe:
// Key: Mehl, Value: 0.79
// Key: Butter, Value: 3.00
// Key: Milch, Value: 2.49

In diesem Beispiel verwenden wir eine foreach-Schleife, um durch das Dictionary zu iterieren und jedes Schlüssel-Wert-Paar auszugeben. So kannst du also zum Beispiel ganz einfach alle Werte (Key-Value-Pairs) eines Dictionaries auslesen.

Wie funktioniert ein Dictionary aus Sicht der Informatik

Ein C# Dictionary speichert Werte auf eine effiziente Art und Weise durch die Verwendung von Hashing-Techniken. Jeder Schlüssel (eng. Key) im Dictionary wird in einen Hash-Wert umgewandelt, der als Index für einen Speicherbereich verwendet wird, in dem der zugehörige Wert gespeichert wird.

Durch diese Hashing-Technik kann das Dictionary schnell auf Werte zugreifen, indem es den Hash-Wert des Schlüssels verwendet, anstatt durch die gesamte Sammlung von Schlüsseln zu iterieren.

Anwendungsbeispiele für C# Dictionaries

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> car = 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 und du solltest für die Tiere eine extra Klasse (z.B. Animal) erstellen. Zum Abschluss solltest du über eine GUI/Konsole (z.B. WPF, Windows Forms oder MAUI) 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!

Damit sind wir jetzt am Ende des Artikel angekommen, 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. Erforderliche Felder sind mit * markiert

Willst du wissen, wie du einfach und schnell zum C# Profi wirst?
PRogrammieren lernen kann einfach sein!
Overlay Image
Willst du wissen, wie du einfach und schnell zum C# Profi wirst?
PRogrammieren lernen kann einfach sein!
Overlay Image
Setze dein gelerntes Wissen in die Tat um und programmiere echte Anwendungen.
1. Tipp
1/3
Overlay Image
Setze dein gelerntes Wissen in die Tat um und programmiere echte Anwendungen.
1. Tipp
1/3
Overlay Image
Lerne wie du mit Debugging Fehler eines Programmes professionell beheben kannst.
2. Tipp
2/3
Overlay Image
Lerne wie du mit Debugging Fehler eines Programmes professionell beheben kannst.
2. Tipp
2/3
Overlay Image
Fokussiere dich beim lernen auf die richtigen Inhalte und nicht auf die Menge.
3. Tipp
3/3
Overlay Image
Fokussiere dich beim lernen auf die richtigen Inhalte und nicht auf die Menge.
3. Tipp
3/3
Overlay Image
Ja, so einfach kann es sein! Mit meinem C# Video-Intensivkurs wirst du ganz einfach zum echten C# Profi Entwickler. Möchtest du mehr dazu erfahren?
Alles in einem Kurs
Overlay Image
Ja, so einfach kann es sein! Mit meinem C# Intensivkurs für Grundlagen und Expertenwissen wirst du ganz einfach zum echten Profi Entwickler. Möchtest du mehr dazu erfahren?
Alles in einem Kurs
Overlay Image
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.
Datenschutz
IT Leismann, Inhaber: Jannick Leismann (Firmensitz: Deutschland), verarbeitet zum Betrieb dieser Website personenbezogene Daten nur im technisch unbedingt notwendigen Umfang. Alle Details dazu in der Datenschutzerklärung.
Datenschutz
IT Leismann, Inhaber: Jannick Leismann (Firmensitz: Deutschland), verarbeitet zum Betrieb dieser Website personenbezogene Daten nur im technisch unbedingt notwendigen Umfang. Alle Details dazu in der Datenschutzerklärung.