Delphi中的关联数组,带字符串键的数组是否可行?

A1G*_*ard 8 arrays delphi key associative delphi-xe3

如果您使用php,您可以在编程语言中看到php具有关联数组(或数组宽度字符串键).例如:

$server['hostname']  =  'localhost';
$server['database']  =  'test';
$server['username']  =  'root';
$server['password']  =  'password' ;    

// 2d array
$all['myserver']['hostname'] = 'localhost' ;
Run Code Online (Sandbox Code Playgroud)

但是在delphi中找不到任何默认的使用关联数组的方法.

首先,我希望找到任何输出组件或类的默认方式.第二,如果真的我无法用内部方式找到我强制只选择输出类.

我使用Delphi XE3,非常感谢您的帮助.

编辑:我在这里找到了一个类:http://www.delphipages.com/forum/showthread.php?t=26334 与php相同,但有更好的方法吗?

Dav*_*nan 18

您可以TDictionary<string,string>Generics.Collections单位使用.

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;
Run Code Online (Sandbox Code Playgroud)

等等等等.

如果你想要一个包含字典的字典,你可以使用TDictionary<string, TDictionary<string,string>>.

但是,当您这样做时,您需要特别注意外部字典中包含的字典项的生命周期.您可以使用它TObjectDictionary<K,V>来帮助管理它.您可以像这样创建以下对象之一:

TObjectDictionary<string, TDictionary<string,string>>.Create([doOwnsValues]);
Run Code Online (Sandbox Code Playgroud)

TObjectDictionary<k,V>操作同样是作为一个传统TObjectListOwnsObjects设置为True.

  • 我不明白这个评论.您要找的是我的答案中描述的类. (2认同)

小智 11

您可以使用tStrings和tStringList来实现此目的,但是2d数组不在这些组件的范围内.

用法;

var
  names  : TStrings;
begin
  ...
  names := TStringList.Create;
  ...
  ...
  names.values['ABC'] := 'VALUE of ABC' ;
  ...
  ...
end ;
Run Code Online (Sandbox Code Playgroud)

  • 应该是:=(赋值运算符)不是=比较两个值/对象 (3认同)