Typ generyczny Dictionary

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 4480 razy

Wstęp

Słownik, czyli Dictionary pozwala na indeksowanie elementów po dowolnych obiektach. Z tego też względu podczas deklaracji obiektu słownika konieczne jest określenie typu klucza i wartości, gdzie kluczem jest wartość indeksu, pod którym obiekt jest zapisany, natomiast wartością jest obiekt pod tym indeksem zapisany.

Tworzenie obiektu słownika oraz dodawanie do niego elementów

Słownik Dictionary jest dostępny z poziomu przestrzeni nazw:

using System.Collections.Generic;

Utworzenie obiektu słownika odbywa się w następujący sposób:

var dict = new Dictionary<Object, int>();

W powyższym przypadku utworzony został obiekt słownika, który może przyjmować jako klucz dowolny typ wartości a to dlatego, że tym typem jest klasa Object, po której w C# wszystko dziedziczy. Oto przykład, jak do takiego słownika wrzuca się dane:

dict.Add(10, 120); dict.Add("F-16", 2300); dict.Add(new Point2D(100, 300), 100);

Jak widać na powyższym przykładzie, można jako klucz wrzucić dowolny obiekt, a to dlatego, że typ klucza jest klasa Object

Indeksowanie i właściwość Count

Indeksowanie elementów słownika odbywa się po kluczu, czyli odwołać się do do danej wartości w słowniku można np. tak:

Console.WriteLine(dict["F-16"].ToString());

Powyższy kod wyświetli:

2300

Istnieje również właściwość Count, która zwraca liczbę elementów zawartych w słowniki.

Iterowanie po kluczach i wartościach słownika

Iterowanie za pomocą pętli foreach wygląda następująco:

var dict = new Dictionary<Object, int>(); dict.Add(10, 120); dict.Add("F-16", 2300); dict.Add(new Point2D(100, 300), 100); foreach (KeyValuePair<Object, int> kvp in dict) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key.ToString(), kvp.Value.ToString()); }

Oto wynik działania powyższego kodu:

Klucz = 10, Wartość = 120
Klucz = F-16, Wartość = 2300
Klucz = Point2D x = 100; y = 300, Wartość = 100

Właściwość Keys i iterowanie po kluczach

Właściwość Keys daje nam dostęp do kluczy, po których można iterować w następujący sposób:

var dict = new Dictionary<Object, int>(); dict.Add(10, 120); dict.Add("F-16", 2300); dict.Add(new Point2D(100, 300), 100); foreach (Object i in dict.Keys) { Console.WriteLine("Klucz = {0}", i); }

Wynik działania powyższego kodu:

Klucz = 10
Klucz = F-16
Klucz = Point2D x = 100; y = 300

Właściwość Values i iterowanie po wartościach

Właściwość Values daje nam dostęp do wartości, po których można iterować w następujący sposób:

var dict = new Dictionary<Object, int>(); dict.Add(10, 120); dict.Add("F-16", 2300); dict.Add(new Point2D(100, 300), 100); foreach (Object i in dict.Values) { Console.WriteLine("Wartość = {0}", i); }

Wynik działania powyższego kodu:

Wartość = 120
Wartość = 2300
Wartość = 300

Usuwanie elementów ze słownika

Metoda Remove umożliwia usuniecie pojedynczej elementu o podanym kluczu:

var dict = new Dictionary<Object, int>(); dict.Add(10, 120); dict.Add("F-16", 2300); var p = new Point2D(100, 300); dict.Add(p, 100); dict.Remove(p); foreach (KeyValuePair<Object, int> kvp in dict) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key.ToString(), kvp.Value.ToString()); }

Wynik działania tego kodu:

Klucz = 10
Klucz = F-16

Można również usunąć wszystkie elementy słownika za pomocą metody Clear.

Propozycje książek