Typ generyczny Dictionary

Stronę tą wyświetlono już: 269 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:

Listing 1
  1. using System.Collections.Generic;

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

Listing 2
  1. 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:

Listing 3
  1. dict.Add(10, 120);
  2. dict.Add("F-16", 2300);
  3. 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:

Listing 4
  1. 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:

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

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:

Listing 6
  1. var dict = new Dictionary<Object, int>();
  2. dict.Add(10, 120);
  3. dict.Add("F-16", 2300);
  4. dict.Add(new Point2D(100, 300), 100);
  5. foreach (Object i in dict.Keys)
  6. {
  7. Console.WriteLine("Klucz = {0}", i);
  8. }

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:

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

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:

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

Wynik działania tego kodu:

Klucz = 10
Klucz = F-16

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

Komentarze