Динамические Хеши
(Hashes)

Version 2.0

Copyright © 1998-2001 by Andrey Romanchenko
All rights reserved.

e-mail:   lasersquad@tut.by
web site:   http://DynamicArrays.narod.ru/

Содержание


Общее описание

Хэши - динамические структуры, где хранятся эначения по индексу.
От динамических массивов отличаются тем, что
  1. Хранятся только те значения, которые установлены,т.е. можно занести значение с индексов 1 и с индексом 1 000 000, при этом будет занята память только для двух значений. Удобно для запоминания значений, индексы которых не упорядочены и не линейны.
  2. Индексом может служить не только integer (хотя в настоящей реализации используется только integer индексы).
Визуально хеш можно представить как массив пар чисел где одно число это ключ (индекс), а второе это значение.
Все хэши при чтении несуществующего элемента выдают исключение.
Проверить существование можно с помощью метода THash.IfExist.
THashExists является исключением. В нем хранятся только значения True. Соответственно, IfExist будет выдавать только на них True, и никогда не будет возникать исключения. На запрос несуществующего элемента будет возвращаться значение False, а при установке значения в False оно просто удалится из хеша.


Инсталяция

Динамические Хеши как и динамические массивы не требуют никакой инсталяции. Достаточно включить модуль DynamicArrays.pas в секцию uses нужного модуля вашего проекта и все. Только не забудьте указать Delphi путь где вы разместили файл DynamicArrays.pas. Это можно сделать либо в либо в

Глобальные определения

См. Динамические массивы для описания глобальных определений.


THash

Обобщенный абстрактный класс. Предок всех классов-хешей. В отличие от THArray можно устанавливать/читать и не существующие до этого момента значения. Никаких исключений при этом не возникает.

Свойства
property AIndexes:THArrayInteger; ReadOnly свойство возвращающее массив THArrayInteger содержащий все ключи (Keys) всех значений в хеше.
property Count:integer; Количество значений в хэше.
property Keys[Index:integer]:integer; Возвращает ключ (индекс) элемента, хранящегося в Index позиции (Index: 0..Count-1).
Методы
procedure Clear;virtual; Чистит хеш, но память не освобождает (остатется для хранения новых данных). Если хеш часто чистится перезаписывается, но размер примерно одинаков, память чистить не обязательно - следующий раз не будет захватываться память, которая уже использовалась. См. также метод ClearMem.
procedure ClearMem;virtual; Чистит хеш, при этом освобождая всю память.
procedure Delete(Key:integer); virtual;abstract; Удаляет значение для ключа Key. Ключ и значение удаляются из хеша. В дальнешем IfExist будет возвращать False на этот ключ.
function IfExist(Key:integer):boolean; Проверка - существует ли элемент с ключем Key. Если существует то возвращает True, иначе False.


THashBoolean

Хеш для хранения boolean чисел. Хранит как True так и False значения поэтому существует возможность отдельно проверить есть ли значение в хеше и если есть то какое True или False. См. также THashExists.

Свойства
property Value[Index:integer]:boolean;default; Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает False.
Методы
constructor CreateFromHArrays(IndexHArray:THArrayInteger; ValueHArray:THArrayBoolean); Позволяет создать хеш из двух массивов. Один массив рассматривается как массив индексов (ключей), а второй как массив значений. При этом значения из массивов не копируются а копируются только ссылки на эти массивы и весь хеш становится read only т.е. позволяет только читать значения.


THashExists

Хеш для хранения Boolean значений. Главное отличие от THashBoolean в том что THashExists не хранит False значений т.е. при установке значения в False оно автоматически удаляется из хеша.

Свойства
property Value[Index:integer]:boolean;default; Установка/удаление значения из хеша по индексу.
При установке значения в False оно автоматически удаляется из хеша.


THashInteger

Хеш для хранения целых чисел (integer).

Свойства
property AValues:THArrayInteger read FAValues; ReadOnly свойство. Возвращает хранимые значения как массив THArrayInteger. См. так же THash.AIndexes.
property Value[Index:integer]:integer;default; Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает 0.
Методы
constructor CreateFromHArrays(IndexHArray:THArrayInteger; ValueHArray:THArrayInteger); Позволяет создать хеш из двух массивов. Один массив рассматривается как массив индексов (ключей), а второй как массив значений. При этом значения из массивов не копируются, а копируются только ссылки на эти массивы и весь хеш становится read only т.е. позволяет только читать значения.


THashPointer

Хеш для хранения указателей (pointer). Никаких специальных действий над указателями не производит просто хранит их и все. Поэтому позволяет хранить указатели на что угодно.

Свойства
property AValues:THArrayPointer read FAValues; ReadOnly свойство. Возвращает хранимые значения как массив THArrayInteger. См. так же THash.AIndexes.
property Value[Index:integer]:pointer; Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает nil.
Методы
constructor CreateFromHArrays(IndexHArray:THArrayInteger; ValueHArray:THArrayPointer); Позволяет создать хеш из двух массивов. Один массив рассматривается как массив индексов (ключей), а второй как массив значений. При этом значения из массивов не копируются, а копируются только ссылки на эти массивы и весь хеш становится read only т.е. позволяет только читать значения.


THashCurrency

Хеш для хранения чисел Currency.

Свойства
property Value[Index:integer]:Currency; Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает 0.
Методы
constructor CreateFromHArrays(IndexHArray:THArrayInteger; ValueHArray:THArrayCurrency); Позволяет создать хеш из двух массивов. Один массив рассматривается как массив индексов (ключей), а второй как массив значений. При этом значения из массивов не копируются, а копируются только ссылки на эти массивы и весь хеш становится read only т.е. позволяет только читать значения.
procedure Inc(Key:integer;Value:currency); Увеличивает хранящееся значение с ключом Key на Value. Если значение не существует то создает значение в ключом Key и значением Value.


THashDouble

Хеш для хранения чисел Double.

Свойства
property Value[Index:integer]:Double; Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает 0.
Методы
constructor CreateFromHArrays(IndexHArray:THArrayInteger; ValueHArray:THArrayDouble); Позволяет создать хеш из двух массивов. Один массив рассматривается как массив индексов (ключей), а второй как массив значений. При этом значения из массивов не копируются, а копируются только ссылки на эти массивы и весь хеш становится read only т.е. позволяет только читать значения.
procedure Inc(Key:integer;Value:Double); Увеличивает хранящееся значение с ключом Key на Value. Если значение не существует то создает значение в ключом Key и значением Value.


THashString

Хеш для хранения строк.
Имеет специальное свойство AllowEmptyStr регулирующее логику работы хеша.
Если AllowEmptyStr=True то хеш будет хранить пустые строки.
Если AllowEmptyStr=False то хеш не будет хранить пустые строки и при установке значения в пустую строку значение будет автоматически удалено из хеша.

Свойства
property
AllowEmptyStr:boolean;
Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает 0.
property Value[Index:integer]:string; Установка/удаление значения из хеша по индексу. Если значение не существует то по умолчанию возвращает пустую строку.