Uso de TDictionary para tablas de hash en Delphi

click fraud protection

Introducido en Delphi 2009, el TDictionary clase, definido en los genéricos. Unidad de colecciones, representa una colección genérica de tipo de tabla hash de pares clave-valor.

Tipos genéricos, también introducido en Delphi 2009, le permite definir clases que no definen específicamente el tipo de miembros de datos.

Un diccionario es, en cierto modo, similar a una matriz. En un formación trabaja con una serie (colección) de valores indexados por un valor entero, que puede ser cualquier valor de tipo ordinal. Este índice tiene un límite inferior y superior.

En un diccionario, puede almacenar claves y valores donde cualquiera puede ser de cualquier tipo.

El constructor TDictionary

De ahí la declaración del constructor TDictionary:

En Delphi, el TDictionary se define como una tabla hash. Las tablas hash representan una colección de pares clave-valor que se organizan en función del código hash de la clave. Las tablas hash están optimizadas para búsquedas (velocidad). Cuando se agrega un par clave-valor a una tabla hash, el hash de la clave se calcula y almacena junto con el par agregado.

instagram viewer

TKey y TValue, porque son genéricos, pueden ser de cualquier tipo. Por ejemplo, si la información que debe almacenar en el diccionario proviene de alguna base de datos, su clave puede ser un GUID (o algún otro valor que presente el índice único), mientras que el Valor puede ser un objeto asignado a una fila de datos en su base de datos mesas.

Usando TDictionary

En aras de la simplicidad, el siguiente ejemplo utiliza números enteros para TKeys y caracteres para TValues.

Primero, declaramos nuestro diccionario especificando cuáles serán los tipos de TKey y TValue:

Luego, el diccionario se llena con el método Agregar. Debido a que un diccionario no puede tener dos pares con el mismo valor clave, puede usar el método ContainsKey para verificar si algún par clave-valor ya está dentro del diccionario.

Para eliminar un par del diccionario, use el método Eliminar. Este método no causará problemas si un par con una clave especificada no forma parte del diccionario.

Para recorrer todos los pares recorriendo las teclas, puede hacer un para en bucle.

Use el método TryGetValue para verificar si algún par clave-valor está incluido en el diccionario.

Ordenar el diccionario

Debido a que un diccionario es una tabla hash, no almacena elementos en un orden de clasificación definido. Para recorrer las claves ordenadas para satisfacer sus necesidades específicas, aproveche el TList, un tipo de colección genérico que admite la clasificación.

El código anterior ordena las teclas de forma ascendente y descendente y toma los valores como si estuvieran almacenados en el orden ordenado en el diccionario. La clasificación descendente de los valores clave de tipo entero utiliza TComparer y un método anónimo.

Cuando las claves y los valores son de tipo TObject

El ejemplo mencionado anteriormente es simple porque tanto la clave como el valor son tipos simples. Puede tener diccionarios complejos donde tanto la clave como el valor son tipos "complejos" como registros u objetos.

Aquí hay otro ejemplo:

Aquí se usa un registro personalizado para la Clave y un objeto / clase personalizado para el valor.

Tenga en cuenta el uso de un especialista TObjectDictionary clase aqui. TObjectDictionary puede manejar la vida útil de los objetos automáticamente.

El valor de la clave no puede ser nulo, mientras que el valor del valor sí.

Cuando se crea una instancia de TObjectDictionary, un parámetro Ownerships especifica si el diccionario posee las claves, los valores o ambos, y, por lo tanto, le ayuda a no tener pérdidas de memoria.

instagram story viewer