8

如果您使用 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 相同,但有更好的方法吗?

4

4 回答 4

19

您可以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;

等等等等。

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

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

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

TObjectDictionary<k,V>操作与传统TObjectListOwnsObjectsset to相同True

于 2012-12-07T15:04:01.067 回答
14

您可以为此目的使用 tStrings 和 tStringList,但二维数组超出了这些组件的范围。

用法;

var
  names  : TStrings;
begin
  ...
  names := TStringList.Create;
  ...
  ...
  names.values['ABC'] := 'VALUE of ABC' ;
  ...
  ...
end ;
于 2012-12-07T15:06:45.290 回答
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_TypesCharconst_TypesStr作为一个具有AnsiIndexStr函数的关联数组。

优点是它很简单,而且每次我们向数组中添加元素时,我们不需要在程序中的不同位置更改代码。

于 2016-05-05T11:49:11.547 回答
0

看看ArrayS。您可以使用关联数组来存储预定义的数据类型(整数、字符串、布尔值、浮点数)或其中任何一种。例如,下面我定义了一个关联的浮点数数组:

uses ArrayS;

var floats : IFltArray;

floats := CreateArray;
floats['first'] := 0.1;
floats['second'] := 0.2;
writeln( floats['second'] );

等等。

更新于 2020-03-15

压缩源代码

俄语用法示例

于 2018-08-13T21:38:01.830 回答