Подтвердить что ты не робот

Есть ли что-то вроде карты или хеш-таблицы в Delphi 6?

Есть ли какая-либо реализация встроенной карты в delphi 6 (ключи карты к значениям и объектам) - Интернет пока не помог. Я просто получил проект delphi, сбрасываемый на моем, мой фон - С++ и java, а предыдущий разработчик проекта delphi выполняет поиск по линейности.

Спасибо.

4b9b3361

Ответ 1

В зависимости от ваших конкретных потребностей вы можете использовать объект TStringList.

Ответ 2

Я использовал библиотеку под названием Hashes.pas от Ciaran McCreesh, но поскольку его веб-сайт больше не доступен, вы можете увидеть один файл PAS со следующего URL-адреса:

Ссылка на Cian McCreesh - Hashes.pas

Вы также можете найти его с помощью google с текстом: "Cian McCreesh Hashes"

С помощью этой библиотеки вы можете сделать следующее:

aString := TStringHash.Create;
aString['color'] := 'blue';
ShowMessage(aString.Items['color']); // blue

Или объекты:

aObj := TObjectHash.Create;
aObj['color'] := TBlueClass.Create;
bcBlue:=(aObj.Items['color'] as TBlueClass);
ShowMessage(bcBlue.Name); // Blue (supposing the TBLusClass as a Name property...

Надеюсь, что он будет служить вам, а также мне.

PS Я думаю, что проект Ares AudioGalaxy также использует его.

Ответ 3

Я тестировал TStringList и некоторые реализации ThashTable, а различия между этими двумя реализациями минимальны, и в большинстве случаев TStringList (с реализацией двукодового типа) более эффективен, чем ThashTable.
Для небольшого числа значений TStringList быстрее, чем Hash, и для большого количества значений вы должны найти сложную хеш-функцию для минимизации столкновения, и эта сложность снижает эффективность HashList.

Вы должны использовать указатель Object для StringList для хранения всей необходимой вам информации (вторая строка).

С уважением.

Ответ 4

Jedi Code Library содержит некоторые дополнительные классы контейнеров. Интерфейсы объявлены в JclContainerIntf.pas, например:

  IJclMap = interface(IJclContainer)
    ['{A7D0A882-6952-496D-A258-23D47DDCCBC4}']
    procedure Clear;
    function ContainsKey(Key: TObject): Boolean;
    function ContainsValue(Value: TObject): Boolean;
    function Extract(Key: TObject): TObject;
    function GetValue(Key: TObject): TObject;
    function IsEmpty: Boolean;
    function KeyOfValue(Value: TObject): TObject;
    function KeySet: IJclSet;
    function MapEquals(const AMap: IJclMap): Boolean;
    procedure PutAll(const AMap: IJclMap);
    procedure PutValue(Key, Value: TObject);
    function Remove(Key: TObject): TObject;
    function Size: Integer;
    function Values: IJclCollection;
    property Items[Key: TObject]: TObject read GetValue write PutValue;
      {$IFNDEF BUGGY_DEFAULT_INDEXED_PROP} default; {$ENDIF ~BUGGY_DEFAULT_INDEXED_PROP}
  end;