Tutorial :Is there anything like a map or a hashtable in Delphi 6?


Is there any kind of native map implementation in delphi 6 (map keys to values and objects) - the internet has been of no help so far. I just got a delphi project dumped on my, my background is c++ and java, and the previous dev of the delphi project does all the searching linearly.



Depending on your exact needs, you might want to use the TStringList object.


I´ve used a library called Hashes.pas from Ciaran McCreesh but since his website is no longer available you can see the single PAS file from the following URL:

Link to Ciaran McCreesh - Hashes.pas

You can also find it with google with the text: "Ciaran McCreesh Hashes"

With this library you can do the following:

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

Or objects:

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

Hope it serves you as well as for me.

PS I think the Ares AudioGalaxy project also uses it.


I have tested TStringList and some THashTable implementations and the differences between the two implementations are minimal, and in most cases TStringList (with dicotomical sort implementation) are more efficient than THashTable.
For a small number of values TStringList is faster than Hash, and for a large number of values you must find a complex hash-function for minimize the collision, and this complexity decreases the efficiency of the HashList.

You must use the Object pointer of the StringList to store all the information that you need (the second string).



The Jedi Code Library contains some advanced container classes. Interfaces are declared in JclContainerIntf.pas, for example:

  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;  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »