Associative array in Delphi , array with string key is possible?
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
.
A1Gard
Welcome to my page :) I love freedom & open source ;) Fav: php,asm,Delphi,MySQL,Sqlite,Debian,js and fun :-P 4xmen is my life blog
Updated on July 27, 2022Comments
-
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?