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)()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")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 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 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) 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(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
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: 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