Das C#-Wörterbuch verstehen
Eine leistungsstarke Datenstruktur in C#, die oft nicht ausreichend genutzt wird, ist das Wörterbuch. Die Dictionary-Klasse ist eine generische Sammlung, die im System.Collections.Generic-Namensraum zu finden ist. In seinem Video "Die Dictionary-Datenstruktur in C# in 10 Minuten oder weniger," Tim Corey bietet eine prägnante und praktische Anleitung zur effektiven Verwendung von Wörterbüchern in Ihren C#-Anwendungen. In diesem Artikel werden Tims Erklärungen und Beispiele aufgeschlüsselt, damit Sie das Wesentliche des C#-Wörterbuchs mit Leichtigkeit erfassen können.
Einführung in Wörterbücher
Tim beginnt mit einer Einführung in das Konzept eines Wörterbuchs in C#. Er vergleicht es mit einem echten Wörterbuch, in dem man ein Wort (Schlüssel) nachschlägt, um seine Definition (Wert) zu finden. In C# ist ein Wörterbuch eine Sammlung von Schlüssel-Wert-Paaren, bei denen jeder Schlüssel eindeutig ist und nicht null sein kann.
Erstellen eines Wörterbuchs
Ein Wörterbuch in C# wird mit der Dictionary<TKey, TValue> Syntax deklariert, die eine effiziente Datenspeicherung und -abfrage über Schlüssel-Wert-Paare ermöglicht. Mit einer anfänglichen Standardkapazität, die während der Instanzierung festgelegt wird, können Wörterbücher dynamisch angepasst werden, wenn Elemente hinzugefügt werden.
Bei (0:28) beginnt Tim mit einer einfachen Konsolenanwendung, um zu demonstrieren, wie man ein Wörterbuch erstellt. Er verwendet den folgenden Code, um ein Wörterbuch mit Ganzzahlen als Schlüssel und Zeichenketten als Werte zu initialisieren:
// Declare a dictionary with integer keys and string values
Dictionary<int, string> rookieOfTheYear = new Dictionary<int, string>();
// Declare a dictionary with integer keys and string values
Dictionary<int, string> rookieOfTheYear = new Dictionary<int, string>();
Hier spezifiziert Dictionary<int, string>, dass die Schlüssel Ganzzahlen (int) und die Werte Zeichenfolgen (string) sein werden. Die Variable rookieOfTheYear ist der Name der Wörterbuchinstanz. Sie können auch Zeichenfolgen als Schlüssel verwenden, indem Sie den Schlüsseltyp als string festlegen.
Hinzufügen von Elementen zu einem Wörterbuch
Tim fügt nun Elemente zum Wörterbuch hinzu (2:08). Er zeigt, wie man die Add Methode verwendet, um Schlüssel-Wert-Paare hinzuzufügen:
// Add entries to the dictionary
rookieOfTheYear.Add(2000, "Mike Miller");
rookieOfTheYear.Add(2001, "Jane Doe");
rookieOfTheYear.Add(2002, "Jane Doe");
rookieOfTheYear.Add(2003, "John Smith");
// Add entries to the dictionary
rookieOfTheYear.Add(2000, "Mike Miller");
rookieOfTheYear.Add(2001, "Jane Doe");
rookieOfTheYear.Add(2002, "Jane Doe");
rookieOfTheYear.Add(2003, "John Smith");
In diesem Beispiel:
-
rookieOfTheYear.Add(2000, "Mike Miller")fügt den angegebenen Schlüssel2000mit dem Wert"Mike Miller"hinzu. - Ähnlich sind die Schlüssel
2001,2002und2003jeweils mit"Jane Doe","Jane Doe"und"John Smith"verknüpft.
Er weist darauf hin, dass Werte zwar wiederholt werden können, die Schlüssel aber eindeutig sein müssen. Der Versuch, einen doppelten Schlüssel hinzuzufügen, führt zu einer Ausnahme:
rookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exception
rookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exception
Diese Ausnahme tritt auf, weil der Schlüssel 2001 bereits im Wörterbuch existiert.
Zugriff auf Wörterbuch-Elemente
Zur Veranschaulichung der Werteabfrage verwendet Tim die folgende Codezeile (3:45):
// Accessing a value with a specific key
Console.WriteLine(rookieOfTheYear[2002]); // Outputs: Jane Doe
// Accessing a value with a specific key
Console.WriteLine(rookieOfTheYear[2002]); // Outputs: Jane Doe
Hier greift rookieOfTheYear[2002] auf den Wert zu, der mit dem Schlüssel 2002 verknüpft ist. Dies ist ein sehr effizienter Weg, um Werte anhand von Schlüsseln nachzuschlagen.

Prüfung auf Vorhandensein von Schlüsseln
Um (4:29) diskutiert Tim, wie man mit der ContainsKey Methode prüft, ob ein Schlüssel im Wörterbuch existiert:
// Check if a key exists before accessing its value
if (rookieOfTheYear.ContainsKey(2002))
{
Console.WriteLine(rookieOfTheYear[2002]);
}
// Check if a key exists before accessing its value
if (rookieOfTheYear.ContainsKey(2002))
{
Console.WriteLine(rookieOfTheYear[2002]);
}
Im obigen Beispiel prüft ContainsKey(2002), ob der Schlüssel 2002 im Wörterbuch existiert. Wenn ja, wird der entsprechende Wert ("Jane Doe") ausgegeben.
Wenn der Schlüssel nicht existiert, gibt das Wörterbuch keine Ausgabe zurück, um Fehler beim Zugriff auf nicht existierende Schlüssel zu vermeiden.
Erweiterung der Wörterbuchkapazitäten
Tim geht auf die Möglichkeiten von Wörterbüchern ein (5:33), indem er ein komplexeres Beispiel mit einem Wörterbuch erstellt, das Zeichenketten auf Listen von Zeichenketten abbildet:
// Declare a dictionary with string keys and List<string> as values
Dictionary<string, List<string>> wishList = new();
// Add entries to the dictionary with lists as values
wishList.Add("Tim Corey", new List<string> { "Xbox", "Tesla", "Pizza" });
wishList.Add("Billy Bob", new List<string> { "PS5", "Ford", "Hoagie" });
wishList.Add("Mary Jane", new List<string> { "House", "Car", "Sub" });
// Declare a dictionary with string keys and List<string> as values
Dictionary<string, List<string>> wishList = new();
// Add entries to the dictionary with lists as values
wishList.Add("Tim Corey", new List<string> { "Xbox", "Tesla", "Pizza" });
wishList.Add("Billy Bob", new List<string> { "PS5", "Ford", "Hoagie" });
wishList.Add("Mary Jane", new List<string> { "House", "Car", "Sub" });
Hier:
-
Die Schlüssel sind Zeichenketten (z. B. "Tim Corey", "Billy Bob", "Mary Jane").
- Die Werte sind Listen von Zeichenketten, die eine Wunschliste für jede Person darstellen.
Iterieren über ein Wörterbuch
Um (7:24) demonstriert Tim, wie man mit einer foreach Schleife über ein Wörterbuch iteriert:
// Iterate over each key-value pair in the dictionary
foreach (var (key, value) in wishList)
{
Console.WriteLine($"{key}'s wish list:");
// Iterate over each item in the list of values
foreach (var item in value)
{
Console.WriteLine($"\t{item}");
}
}
// Iterate over each key-value pair in the dictionary
foreach (var (key, value) in wishList)
{
Console.WriteLine($"{key}'s wish list:");
// Iterate over each item in the list of values
foreach (var item in value)
{
Console.WriteLine($"\t{item}");
}
}
In diesem Beispiel:
-
foreach (var (key, value) in wishList)iteriert über jedes Schlüssel-Wert-Paar imwishListWörterbuch. -
keybezieht sich auf den Schlüssel (z.B. "Tim Corey"). -
valuebezieht sich auf die Liste der mit diesem Schlüssel verknüpften Werte. - Die innere Schleife iteriert über jedes Element in der Liste und gibt es aus.
So können alle Elemente gedruckt werden, wobei eine Schleife verwendet wird, um die Wörterbuchelemente nacheinander mit einem bestimmten Schlüssel und dem dazugehörigen Wert aufzurufen. Hier ist die Ausgabe:

Zugriff auf komplexere Werte
Tim zeigt auch, wie man auf komplexere Werte im Wörterbuch zugreifen kann, indem man explizit den angegebenen Index verwendet (8:26):
// Access the first item in the list of values for the specified key
Console.WriteLine(wishList["Tim Corey"][0]); // Outputs: Xbox
// Access the first item in the list of values for the specified key
Console.WriteLine(wishList["Tim Corey"][0]); // Outputs: Xbox
Hier greift wishList["Tim Corey"] auf die Liste zu, die mit dem Schlüssel "Tim Corey" assoziiert ist, und [0] ruft das erste Element in dieser Liste ab.
Abschluss
Abschließend (9:00) betont Tim, wie wichtig das Verständnis von Wörterbüchern ist. Er weist darauf hin, dass Wörterbücher zwar nicht häufig verwendet werden, aber für Szenarien, die eindeutige Schlüssel und effiziente Suchvorgänge erfordern, unglaublich nützlich sind.
Wichtige Erkenntnisse
-
Erstellen von Wörterbüchern: Verstehen Sie, wie man Wörterbücher mit verschiedenen Datentypen initialisiert.
-
Hinzufügen von Elementen: Erfahren Sie, wie wichtig eindeutige Schlüssel sind und wie man mit Ausnahmen von doppelten Schlüsseln umgeht.
-
Zugriff auf Werte: Effizientes Abrufen von Werten über Schlüssel.
-
Prüfung des Vorhandenseins von Schlüsseln: Vermeiden Sie Fehler, indem Sie das Vorhandensein von Schlüsseln prüfen, bevor Sie auf Werte zugreifen.
-
Erweiterte Verwendung: Implementieren Sie komplexere Wörterbücher, z. B. solche mit Listen als Werte.
- Iteration: Verwenden Sie Schleifen, um alle Elemente in einem Wörterbuch aufzurufen und anzuzeigen.
Wenn Sie Tim Coreys Video folgen, können Sie die Verwendung von Wörterbüchern in C# beherrschen und Ihr Programmiertoolkit für Szenarien erweitern, die eine effiziente Datenabfrage und -speicherung erfordern. Auf Tims Kanal finden Sie weitere informative Videos zu C#.

