TDictionary 多重输出?

TDictionary multiple output?

是否可以在 TDictionary 中存储多个项目?我想要 next

的简单解决方案

我的 table 看起来像:

我想存储 table 中的所有字段并在其中搜索项目后.. TDictionary 是否有能力?我有一个 Paradox Table,Query 是一个简单的 TQuery

我用2个字段做了一个小例子

  var
  stSearch: string;
  vPDX: TDictionary<String, TCity>;
  variable: string; 

  stSearch := '4';
  vPDX := TDictionary<String, String>.Create;      qry_TMP.DatabaseName := 'C:\S_DATABASE';
  qry_TMP.SQL.Text := 'select * from SAMPLE_TABLE';
  qry_TMP.Open;

 while not qry_TMP.Eof do
   begin
   vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID').AsString,  qry_TMP.FieldByName('Location').AsString);    
qry_TMP.Next;
end;

if vPDX.TryGetValue(stSearch, variable) then
  showmessage(variable);

此代码有效,但我还需要另一个字段 (ZIP_CODE)。

我用 Class 试过了,但我只得到了 Table 的最后一项。

 TSampleClass = class
 ZIP_CODe: String;
 Location: String;
 end;

  var
  SampleClass, Value: TSampleClass;
  vPDX := TDictionary<String, TSampleClass>.Create;

  begin

  stSearch := '4';
  SampleClass := TSampleClass.Create;
  vPDX := TDictionary<String, TSampleClass>.Create;  
  qry_TMP.DatabaseName := 'C:\S_DATABASE';
  qry_TMP.SQL.Text := 'select * from SAMPLE_TABLE';
  qry_TMP.Open;

while not qry_TMP.Eof do
  begin
  vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID').AsString, SampleClass);     
  SampleClass.ZIP_CODE := Qry_TMP.FieldByName('ZIP_CODE').AsString;
  SampleClass.City := Qry_TMP.FieldByName('City').AsString;
  qry_TMP.Next;
  end;

if vPDX.TryGetValue(stSearch, SampleClass) then
  showmessage(SampleClass.ZIP_CODE + SampleClass.City);

谁能帮忙看看是什么问题?我想要德国和 5000 ZIP_CODE。我想学习如何使用 TDictionary。感谢您的帮助!

您只调用了一次 tSampleClass.Create

将它移到 WHILE 语句中,以便为每条记录创建一个新实例。

您只创建了一个 SampleClass 实例,这意味着每次后续使用都会覆盖它包含的值。您需要为字典中的每个添加创建一个新实例。

while not qry_TMP.Eof do
begin
  SampleClass := TSampleClass.Create;
  SampleClass.ZIP_CODE := qry_TMP.FieldByName('ZIP_CODE).AsString;
  SampleClass.City := qry_TMP.FieldByName('City').AsString;
  vPDX.AddOrSetValue(qry_TMP.FieldByName('LOCATION_ID', SampleClass);
  qry_TMP.Next;
end;