Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
10m 19s
Potężna struktura danych w C#, która jest często niedoceniana, to słownik. Klasa Dictionary jest ogólną kolekcją znajdującą się w przestrzeni nazw System.Collections.Generic. W swoim filmie, "The Dictionary Data Structure in C# in 10 Minutes or Less", Tim Corey dostarcza zwięzły i praktyczny przewodnik po tym, jak skutecznie używać słowników w aplikacjach C#. Ten artykuł przedstawia wyjaśnienia i przykłady Tima, mając na celu pomóc Ci łatwo zrozumieć podstawy słownika w C#.
Tim zaczyna od przedstawienia pojęcia słownika w C#. Porównuje go do prawdziwego słownika, w którym wyszukujesz słowo (klucz), aby znaleźć jego definicję (wartość). W C#, słownik jest kolekcją par klucz-wartość, gdzie każdy klucz jest unikatowy i nie może być null.
Slownik w C# deklaruje sie, uzywajac skladni Dictionary<TKey, TValue>, co pozwala na efektywne przechowywanie i pobieranie danych przez pary klucz-wartosc. Dzięki domyślnej pojemności początkowej ustawianej podczas jego tworzenia, słowniki mogą dynamicznie dostosowywać się, gdy dodawane są nowe elementy.
O (0:28), Tim zaczyna od podstawowej aplikacji konsolowej, aby pokazać, jak stworzyć słownik. Używa następującego kodu, aby zainicjalizować słownik z liczbami całkowitymi jako kluczami i ciągami jako wartościami:
// 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
Dim rookieOfTheYear As New Dictionary(Of Integer, String)()' Declare a dictionary with integer keys and string values
Dim rookieOfTheYear As New Dictionary(Of Integer, String)()Tutaj Dictionary<int, string> okresla, ze klucze beda liczbami calkowitymi (int), a wartosci beda lancuchami znakow (string). Zmienna rookieOfTheYear to nazwa instancji slownika. Mozna rowniez uzywac kluczy w postaci lancuchow znakow, ustawiajac typ klucza jako string.
Teraz Tim dodaje elementy do słownika o (2:08). Pokazuje, jak uzywac metody Add do dodawania par klucz-wartosc:
// 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");' 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")W tym przykładzie:
rookieOfTheYear.Add(2000, "Mike Miller") dodaje okreslony klucz 2000 z wartoscia "Mike Miller".
Podobnie, klucze 2001, 2002 i 2003 sa powiazane odpowiednio z "Jane Doe", "Jane Doe" i "John Smith".
Zaznacza, że podczas gdy wartości mogą się powtarzać, klucze muszą być unikatowe. Próba dodania duplikatu klucza prowadzi do wyjątku:
rookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exceptionrookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exceptionrookieOfTheYear.Add(2001, "Jane Doe") ' This will throw an exceptionrookieOfTheYear.Add(2001, "Jane Doe") ' This will throw an exceptionTo wyjatek wystepuje, poniewaz klucz 2001 juz istnieje w slowniku.
Aby zademonstrować pobieranie wartości, Tim używa następującej linii kodu o (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' 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 DoeTutaj rookieOfTheYear[2002] dostepuje wartosc powiazana z kluczem 2002. Jest to bardzo wydajny sposób na wyszukiwanie wartości na podstawie kluczy.

O (4:29) Tim omawia, jak sprawdzic, czy klucz istnieje w slowniku, uzywajac metody ContainsKey:
// 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]);
}' Check if a key exists before accessing its value
If rookieOfTheYear.ContainsKey(2002) Then
Console.WriteLine(rookieOfTheYear(2002))
End If' Check if a key exists before accessing its value
If rookieOfTheYear.ContainsKey(2002) Then
Console.WriteLine(rookieOfTheYear(2002))
End IfW przykladzie powyzej ContainsKey(2002) sprawdza, czy klucz 2002 istnieje w slowniku. Jesli tak, odpowiadajaca wartość ("Jane Doe") jest drukowana.
Jeśli klucz nie istnieje, słownik nie zwraca żadnej wartości, co zapobiega błędom związanym z dostępem do nieistniejących kluczy.
Tim rozszerza możliwości słownika o (5:33), tworząc bardziej złożony przykład ze słownikiem, który mapuje ciągi na listy ciągów:
// 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" });' Declare a dictionary with string keys and List(Of String) as values
Dim wishList As New Dictionary(Of String, List(Of String))()
' Add entries to the dictionary with lists as values
wishList.Add("Tim Corey", New List(Of String) From {"Xbox", "Tesla", "Pizza"})
wishList.Add("Billy Bob", New List(Of String) From {"PS5", "Ford", "Hoagie"})
wishList.Add("Mary Jane", New List(Of String) From {"House", "Car", "Sub"})' Declare a dictionary with string keys and List(Of String) as values
Dim wishList As New Dictionary(Of String, List(Of String))()
' Add entries to the dictionary with lists as values
wishList.Add("Tim Corey", New List(Of String) From {"Xbox", "Tesla", "Pizza"})
wishList.Add("Billy Bob", New List(Of String) From {"PS5", "Ford", "Hoagie"})
wishList.Add("Mary Jane", New List(Of String) From {"House", "Car", "Sub"})Tutaj:
Klucze są ciągami (np. "Tim Corey", "Billy Bob", "Mary Jane").
Wartości są listami ciągów, reprezentującymi listę życzeń dla każdej osoby.
O (7:24) Tim demonstruje, jak iterowac przez slownik za pomocą petli foreach:
// 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}");
}
}' Iterate over each key-value pair in the dictionary
For Each kvp In wishList
Dim key = kvp.Key
Dim value = kvp.Value
Console.WriteLine($"{key}'s wish list:")
' Iterate over each item in the list of values
For Each item In value
Console.WriteLine(vbTab & item)
Next
Next' Iterate over each key-value pair in the dictionary
For Each kvp In wishList
Dim key = kvp.Key
Dim value = kvp.Value
Console.WriteLine($"{key}'s wish list:")
' Iterate over each item in the list of values
For Each item In value
Console.WriteLine(vbTab & item)
Next
NextW tym przykładzie:
foreach (var (key, value) in wishList) iteruje po kazdej parze klucz-wartosc w slowniku wishList.
key odnosi sie do klucza (np. "Tim Corey").
value odnosi sie do listy wartosci powiazanych z tym kluczem.
Wewnętrzna pętla iteruje po każdym elemencie w liście i drukuje go.
Pozwala to na drukowanie wszystkich elementów za pomocą pętli do uzyskiwania dostępu do elementów słownika jeden po drugim przy użyciu określonego klucza i odpowiadającej mu wartości. Oto wynik:

Tim pokazuje również, jak uzyskiwać dostęp do bardziej złożonych wartości w słowniku, wyraźnie używając określonego indeksu o (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' 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: XboxTutaj wishList["Tim Corey"] dostepuje liste powiazana z kluczem "Tim Corey", a [0] pobiera pierwszy element z tej listy.
Tim kończy o (9:00), podkreślając znaczenie rozumienia słowników. Wskazuje, że mimo iż słowniki mogą nie być używane często, są niezwykle przydatne w scenariuszach wymagających unikatowych kluczy i wydajnych wyszukiwań.
Tworzenie słowników: Zrozum, jak inicjalizować słowniki z różnymi typami danych.
Dodawanie elementów: Zrozum znaczenie unikatowych kluczy i jak obsługiwać wyjątki wynikające z duplikatów kluczy.
Uzyskiwanie dostępu do wartości: Efektywnie pobieraj wartości, używając kluczy.
Sprawdzanie istnienia kluczy: Zapobiegaj błędom, sprawdzając istnienie kluczy przed uzyskaniem dostępu do wartości.
Zaawansowane użycie: Implementuj bardziej złożone słowniki, takie jak te z listami jako wartościami.
Iteracja: Używaj pętli do uzyskiwania dostępu do wszystkich elementów w słowniku i ich wyświetlania.
Śledząc wideo Tima Coreya, możesz opanować użycie słowników w C#, wzbogacając swój zestaw narzędzi programistycznych o scenariusze wymagające wydajnego pobierania i przechowywania danych. Sprawdź kanał Tima dla bardziej informacyjnych filmów o C#.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy