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

Słownik w C# jest deklarowany za pomocą składni Dictionary<TKey, TValue>, co pozwala na efektywne przechowywanie i pobieranie danych poprzez pary klucz-wartość. 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> określa, że klucze będą liczbami całkowitymi (int), a wartości będą ciągami (string). Zmienna rookieOfTheYear jest nazwą instancji słownika. Możesz również użyć kluczy tekstowych, ustawiając typ klucza jako string.

Dodawanie elementów do słownika

Teraz Tim dodaje elementy do słownika o (2:08). Pokazuje, jak używać metody Add do dodawania par klucz-wartość:

// 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 określony klucz 2000 z wartością "Mike Miller".

  • Podobnie, klucze 2001, 2002 i 2003 są powiązane z "Jane Doe", "Jane Doe" i "John Smith" odpowiednio.

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

Ten wyjątek występuje, ponieważ klucz 2001 już istnieje w słowniku.

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] uzyskuje dostęp do wartości powiązanej 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 sprawdzić, czy klucz istnieje w słowniku, używając 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 powyższym przykładzie, ContainsKey(2002) sprawdza, czy klucz 2002 istnieje w słowniku. Jeśli tak, drukowana jest odpowiadająca wartość ("Jane Doe").

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 iterować po słowniku, używając pętli 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 każdej parze klucz-wartość w słowniku wishList.

  • key odnosi się do klucza (np. "Tim Corey").

  • value odnosi się do listy wartości powiązanej 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:

Understanding C# Dictionary

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"] uzyskuje dostęp do listy powiązanej 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!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie