Associative array in Delphi , array with string key is possible?

17,129

Solution 1

You can use tStrings and tStringList for this purpose, but 2d arrays are out of the scope of these components.

Usage;

var
  names  : TStrings;
begin
  ...
  names := TStringList.Create;
  ...
  ...
  names.values['ABC'] := 'VALUE of ABC' ;
  ...
  ...
end ;

Solution 2

You can use TDictionary<string,string> from the Generics.Collections unit.

var
  Dict: TDictionary<string,string>;
  myValue: string;
....
Dict := TDictionary<string,string>.Create;
try
  Dict.Add('hostname', 'localhost');
  Dict.Add('database', 'test');
  //etc.
  myValue := Dict['hostname'];
finally
  Dict.Free;
end;

And so on and so on.

If you want a dictionary that contains a dictionary, you can do use TDictionary<string, TDictionary<string,string>>.

However, when you do that you'll need to take special care over the lifetime of the dictionary items that are contained in the outer dictionary. You can use TObjectDictionary<K,V> to help manage that for you. You'd create one of these objects like this:

TObjectDictionary<string, TDictionary<string,string>>.Create([doOwnsValues]);

This TObjectDictionary<k,V> operates the same was as a traditional TObjectList with OwnsObjects set to True.

Share:
17,129
A1Gard
Author by

A1Gard

Welcome to my page :) I love freedom &amp; open source ;) Fav: php,asm,Delphi,MySQL,Sqlite,Debian,js and fun :-P 4xmen is my life blog

Updated on July 27, 2022

Comments

  • A1Gard
    A1Gard almost 2 years

    If you work with php you can see the php have associative array (or array width string key) in programing lang. For example:

    $server['hostname']  =  'localhost';
    $server['database']  =  'test';
    $server['username']  =  'root';
    $server['password']  =  'password' ;    
    
    // 2d array
    $all['myserver']['hostname'] = 'localhost' ;
    

    But can't find any default way to use associative array in delphi.

    First I want find default way with out any output component or class . Second if really I cant find with internal way I force choose output classes only.

    I use Delphi XE3 , many thanks for your help.

    edit: I found one class here : http://www.delphipages.com/forum/showthread.php?t=26334 same as php , but any better way?