首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TDictionary多输出?

TDictionary多输出?
EN

Stack Overflow用户
提问于 2015-11-09 19:30:19
回答 2查看 416关注 0票数 0

是否可以在TDictionary中存储多个项?我想要一个简单的解决方案

我的桌子看起来是:

  • LOCATION_ID,城市,ZIP_CODE
  • 1,英格兰,2000年
  • 2,匈牙利,1000
  • 3,土耳其,300
  • 4,德国,5000 .

我想把表中的所有字段和搜索后的项目都存储在表中。TDictionary有这个能力吗?我有一个悖论表,查询是一个简单的TQuery

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

代码语言:javascript
复制
  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)。

我在课堂上试过了,但我只从桌子上得到了最后一项。

代码语言:javascript
复制
 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。谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-09 19:40:37

你只给tSampleClass.Create打过一次电话。

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

票数 1
EN

Stack Overflow用户

发布于 2015-11-09 19:40:54

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

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33616711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档