Ответ 1
В зависимости от ваших конкретных потребностей вы можете использовать объект TStringList.
Есть ли какая-либо реализация встроенной карты в delphi 6 (ключи карты к значениям и объектам) - Интернет пока не помог. Я просто получил проект delphi, сбрасываемый на моем, мой фон - С++ и java, а предыдущий разработчик проекта delphi выполняет поиск по линейности.
Спасибо.
В зависимости от ваших конкретных потребностей вы можете использовать объект TStringList.
Я использовал библиотеку под названием 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 также использует его.
Я тестировал TStringList и некоторые реализации ThashTable, а различия между этими двумя реализациями минимальны, и в большинстве случаев TStringList (с реализацией двукодового типа) более эффективен, чем ThashTable.
Для небольшого числа значений TStringList быстрее, чем Hash, и для большого количества значений вы должны найти сложную хеш-функцию для минимизации столкновения, и эта сложность снижает эффективность HashList.
Вы должны использовать указатель Object для StringList для хранения всей необходимой вам информации (вторая строка).
С уважением.
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;