Używanie TDictionary dla tablic mieszania w Delphi

Wprowadzony w Delphi 2009, Klasa TDictionary, zdefiniowane w Ogólnych. Jednostka kolekcji reprezentuje ogólny zbiór tabel typu skrótu par klucz-wartość.

Rodzaje ogólne, również wprowadzone w Delphi 2009, pozwalają definiować klasy, które nie definiują konkretnie typu elementów danych.

Słownik jest poniekąd podobny do tablicy. W szyk pracujesz z serią (kolekcją) wartości zindeksowanych wartością całkowitą, która może być dowolna wartość typu porządkowego. Ten indeks ma dolną i górną granicę.

W słowniku można przechowywać klucze i wartości, w których może być dowolnego typu.

Konstruktor TDictionary

Stąd deklaracja konstruktora TDictionary:

W Delphi TDictionary jest zdefiniowany jako tablica skrótów. Tabele skrótów reprezentują zbiór par klucz-wartość, które są zorganizowane na podstawie kodu skrótu klucza. Tabele skrótów są zoptymalizowane pod kątem wyszukiwań (szybkość). Gdy para klucz-wartość jest dodawana do tabeli mieszającej, skrót klucza jest obliczany i przechowywany wraz z dodaną parą.

instagram viewer

TKey i TValue, ponieważ są rodzajowe, mogą być dowolnego typu. Na przykład, jeśli informacje, które mają być przechowywane w słowniku, pochodzą z jakiejś bazy danych, kluczem może być identyfikator GUID (lub niektóre inne wartości prezentujące unikalny indeks), podczas gdy Wartość może być obiektem odwzorowanym na wiersz danych w bazie danych stoły

Korzystanie z TDictionary

Dla uproszczenia w poniższym przykładzie zastosowano liczby całkowite dla klawiszy TKeys i znaki dla wartości TV.

Po pierwsze, deklarujemy nasz słownik, określając, jakie będą typy TKey i TValue:

Następnie słownik jest wypełniany za pomocą metody Add. Ponieważ słownik nie może mieć dwóch par o tej samej wartości klucza, można użyć metody ContainsKey, aby sprawdzić, czy jakaś para o wartości klucza znajduje się już w słowniku.

Aby usunąć parę ze słownika, użyj metody Usuń. Ta metoda nie spowoduje problemów, jeśli para z określonym kluczem nie jest częścią słownika.

Aby przejść przez wszystkie pary, zapętlając klawisze, możesz zrobić do pętli.

Użyj metody TryGetValue, aby sprawdzić, czy w słowniku znajduje się jakaś para klucz-wartość.

Sortowanie słownika

Ponieważ słownik jest tabelą skrótów, nie przechowuje elementów w określonej kolejności sortowania. Aby wykonać iterację kluczy sortowanych zgodnie z konkretnymi potrzebami, skorzystaj z TList - ogólnego typu kolekcji obsługującego sortowanie.

Powyższy kod sortuje klucze rosnąco i malejąco i pobiera wartości tak, jakby były przechowywane w posortowanej kolejności w słowniku. W malejącym sortowaniu wartości liczb całkowitych typu Key używa się TComparer i anonimowej metody.

Gdy klucze i wartości są typu TObject

Powyższy przykład jest prosty, ponieważ zarówno klucz, jak i wartość są typami prostymi. Możesz mieć złożone słowniki, w których zarówno klucz, jak i wartość są typami „złożonymi”, takimi jak rekordy lub obiekty.

Oto inny przykład:

W tym przypadku niestandardowy rekord jest używany dla klucza, a niestandardowy obiekt / klasa jako wartość.

Zwróć uwagę na użycie specjalizacji TObjectDictionary klasa tutaj. TObjectDictionary może automatycznie obsługiwać czas życia obiektów.

Wartość klucza nie może wynosić zero, a wartość wartości może.

Kiedy tworzona jest instancja TObjectDictionary, parametr Ownerships określa, czy słownik jest właścicielem kluczy, wartości, czy obu - i dlatego pomaga uniknąć przecieków pamięci.