如果使用php,你可以在编程语言中看到php有关联数组(或数组宽度字符串键)。 例如:
$server['hostname'] = 'localhost';
$server['database'] = 'test';
$server['username'] = 'root';
$server['password'] = 'password' ;
// 2d array
$all['myserver']['hostname'] = 'localhost' ;
但是在delphi中找不到任何使用关联数组的默认方式。
首先,我希望找到任何输出组件或类的默认方式。 第二,如果我真的无法用内部方式找到,我强制只选择输出类。
我使用Delphi XE3,非常感谢您的帮助。
编辑:
我在这里找到了一个班级:http://www.delphipages.com/forum/showthread.php?t=26334
和php一样,但还有更好的方法吗?
答案 0 :(得分:17)
您可以使用Generics.Collections
单元中的TDictionary<string,string>
。
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;
依旧等等。
如果您想要包含字典的字典,可以使用TDictionary<string, TDictionary<string,string>>
。
但是,当您这样做时,您需要特别注意外部字典中包含的字典项的生命周期。您可以使用TObjectDictionary<K,V>
来帮助您管理。你可以像这样创建其中一个对象:
TObjectDictionary<string, TDictionary<string,string>>.Create([doOwnsValues]);
此TObjectDictionary<k,V>
的操作方式与传统的TObjectList
相同,OwnsObjects
设置为True
。
答案 1 :(得分:10)
您可以使用tStrings和tStringList来实现此目的,但是2d数组不在这些组件的范围内。
用法;
var
names : TStrings;
begin
...
names := TStringList.Create;
...
...
names.values['ABC'] = 'VALUE of ABC' ;
...
...
end ;
答案 2 :(得分:0)
我用简单的方法解决了问题(例子):
uses StrUtils;
...
const const_TypesChar : array [0..4] of String =
(
'I',
'F',
'D',
'S',
'B'
);
const const_TypesStr : array [0..4] of String =
(
'Integer',
'Float',
'Datetime',
'String',
'Boolean'
);
...
Value := const_TypesStr[ AnsiIndexStr('S', const_TypesChar) ];
// As an example, after execution of this code Value variable will have 'String' value.
//
然后在程序中我们使用两个数组 const_TypesChar 和 const_TypesStr 作为一个具有 AnsiIndexStr 功能的关联数组。
优点是它很简单,每当我们向数组添加元素时,我们都不需要在程序的不同位置更改代码。
答案 3 :(得分:0)
查看ArrayS unit。您可以使用存储预定义类型的数据(整数,字符串,布尔值,浮点数)或其中任何一种的关联数组。例如,下面我定义了一个浮点数的关联数组:
uses ArrayS;
var floats : IFltArray;
floats : CreateArray;
floats['first'] := 0.1;
floats['second'] := 0.2;
writeln( floats['second'] );
以此类推。