在Delphi 6中是否有类似地图或哈希表的内容?

时间:2010-05-19 13:58:34

标签: delphi

delphi 6中是否存在任何类型的本地地图实现(将值映射到值和对象) - 到目前为止,互联网一直没有帮助。我刚刚将一个delphi项目转储到我的上面,我的背景是c ++和java,而delphi项目的前一个开发项目是线性搜索所有内容。

感谢。

4 个答案:

答案 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;