delphi 6中是否存在任何类型的本地地图实现(将值映射到值和对象) - 到目前为止,互联网一直没有帮助。我刚刚将一个delphi项目转储到我的上面,我的背景是c ++和java,而delphi项目的前一个开发项目是线性搜索所有内容。
感谢。
答案 0 :(得分:10)
根据您的确切需要,您可能希望使用TStringList对象。
答案 1 :(得分:7)
我使用了来自Ciaran McCreesh的名为Hashes.pas的库,但由于他的网站不再可用,您可以从以下网址看到单个PAS文件:
Link to Ciaran McCreesh - Hashes.pas
你也可以通过谷歌找到它:“Ciaran 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项目也使用它。
答案 2 :(得分:5)
我测试了TStringList和一些THashTable实现,两个实现之间的差异很小,在大多数情况下,TStringList(具有双重排序实现)比THashTable更有效。
对于少量值,TStringList比Hash快,对于大量值,您必须找到一个复杂的哈希函数来最小化冲突,这种复杂性会降低HashList的效率。
您必须使用StringList的 Object 指针来存储您需要的所有信息(第二个字符串)。
问候。
答案 3 :(得分: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;