Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Zrozumienie słownika w C#

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

Wprowadzenie do słowników

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.

Tworzenie słownika

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
Dictionary<int, string> rookieOfTheYear = new Dictionary<int, 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.

Dodawanie elementów do słownika

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 exception
rookieOfTheYear.Add(2001, "Jane Doe"); // This will throw an exception

To wyjatek wystepuje, poniewaz klucz 2001 juz istnieje w slowniku.

Uzyskiwanie dostępu do elementów słownika

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

Tutaj rookieOfTheYear[2002] dostepuje wartosc powiazana z kluczem 2002. Jest to bardzo wydajny sposób na wyszukiwanie wartości na podstawie kluczy.

Understanding C# Dictionary

Sprawdzanie obecności klucza

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]);
}

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

Rozszerzanie możliwości słownika

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" });

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.

Iterowanie po słowniku

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}");
    }
}

W 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:

Zrozumienie słownika C#

Uzyskiwanie dostępu do bardziej złożonych wartości

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

Tutaj wishList["Tim Corey"] dostepuje liste powiazana z kluczem "Tim Corey", a [0] pobiera pierwszy element z tej listy.

Wnioski

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

Najważniejsze wnioski

  • 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#.

Hero Worlddot related to Zrozumienie słownika w C#
Hero Affiliate related to Zrozumienie słownika w C#

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie