Použití TDictionary pro Hash Tables v Delphi

click fraud protection

Představen v Delphi 2009, TDictionary class, definovaná v obecném popisu. Jednotka kolekce představuje obecnou kolekci typu hash tabulky párů klíč-hodnota.

Obecné typy, který byl představen v Delphi 2009, vám umožňuje definovat třídy, které konkrétně nedefinují typ datových členů.

Slovník je svým způsobem podobný matici. V a pole pracujete s řadou (kolekcí) hodnot indexovaných celočíselnou hodnotou, která může být libovolná hodnota pořadového typu. Tento index má dolní a horní mez.

Ve slovníku můžete ukládat klíče a hodnoty, které mohou být jakéhokoli typu.

TDictionary Constructor

Proto prohlášení konstruktéra TDictionary:

V Delphi je TDictionary definován jako hašovací tabulka. Hašovací tabulky představují sbírku párů klíč-hodnota, které jsou uspořádány na základě hashovacího kódu klíče. Hash tabulky jsou optimalizovány pro vyhledávání (rychlost). Když je pár klíč-hodnota přidán do hašovací tabulky, vypočítá se hash klíče a uloží se spolu s přidaným párem.

TKey a TValue, protože jsou to generici, mohou být jakéhokoli typu. Pokud například informace, které chcete uložit do slovníku, pocházejí z nějaké databáze, může být váš klíč GUID (nebo nějaká jiná hodnota představující jedinečný index) hodnota, zatímco hodnota může být objekt namapovaný na řadu dat v databázi tabulky.

instagram viewer

Pomocí TDictionary

Pro zjednodušení je v níže uvedeném příkladu používána celá čísla pro TKeys a znaky pro televizní hodnoty.

Nejprve prohlásíme náš slovník zadáním, jaké budou typy TKey a TValue:

Poté je slovník naplněn pomocí metody Přidat. Protože slovník nemůže mít dva páry se stejnou hodnotou klíče, můžete pomocí metody ContainsKey zkontrolovat, zda je některý pár s hodnotou klíče již uvnitř slovníku.

Chcete-li odebrat dvojici ze slovníku, použijte metodu Odebrat. Tato metoda nezpůsobí problémy, pokud pár se zadaným klíčem není součástí slovníku.

Chcete-li projít všechny páry opakováním kláves, můžete to udělat pro ve smyčce.

Pomocí metody TryGetValue zkontrolujte, zda je ve slovníku zahrnut nějaký pár klíč – hodnota.

Třídění slovníku

Protože slovník je hashovací tabulka, neukladá položky v definovaném pořadí řazení. Chcete-li iterovat pomocí klíčů, které jsou tříděny podle vašich konkrétních potřeb, využijte TList - obecný typ kolekce podporující třídění.

Kód výše třídí klíče vzestupně a sestupně a popadne hodnoty, jako by byly uloženy v seřazeném pořadí ve slovníku. Klesající třídění celočíselných hodnot klíče používá TComparer a anonymní metodu.

Když klíče a hodnoty jsou typu TObject

Výše uvedený příklad je jednoduchý, protože klíč i hodnota jsou jednoduché typy. Můžete mít složité slovníky, kde klíč i hodnota jsou „složité“ typy, jako jsou záznamy nebo objekty.

Zde je další příklad:

Zde se pro klíč používá vlastní záznam a pro hodnotu se používá vlastní objekt / třída.

Poznámka: použití specializované TObjectDictionary třída zde. TObjectDictionary dokáže automaticky zpracovat životnost objektů.

Hodnota klíče nemůže být nulová, zatímco hodnota Hodnota může.

Je-li instancí TObjectDictionary, parametr Vlastnictví určuje, zda slovník vlastní klíče, hodnoty nebo obojí - a proto vám pomáhá vyhnout se nevracení paměti.

instagram story viewer