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!
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:
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 derKey
ist und der Preis derValue
.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:
- Der Schlüssel (Key) soll vom Datentyp
string
sein - 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>:
Das zweite Beispiel ist für einen Supermarkt <string, float> für <produkt, preis>:
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>();
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
You have utilized all of your attempts to pass this quiz.
Programmierübungen für dich
Zum warm werden:
- Erstelle ein C# Dictionary mit Schlüssel-Wert-Paaren (key-value-pairs) der Datentypen int und string
- Füge Elemente zu dem Dictionary hinzu
- Durchlaufe (iteriere) das Dictionary mit einer Schleife
- 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!