【发布时间】:2010-10-21 09:29:51
【问题描述】:
有一个hash pas文件http://gpdelphiunits.googlecode.com/svn-history/r4/trunk/src/GpStringHash.pas
我们可以创建hash并添加key-value
问题 1: 我们想知道如何迭代key-value并将数据复制到listview。
问题2:有没有办法像assign方法一样快速复制?
非常感谢您。
亲爱的 gabr,非常感谢您的即时回复和您的哈希文件。您的代码是否有文档或帮助文件或示例或演示?再次感谢你。
只是测试,不知道哪里做错了 非常感谢。我刚刚使用了您的代码,但出现以下错误提示。或者我犯了一些错误:
procedure TForm8.ab;
var
a: TGpStringHash;
i,j, fr:integer;
k: string;
enlist: TGpStringHashenumerator;
kv: TGpStringHashKV;
begin
a:=TGpStringHash.Create;
kv:=TGpStringHashKV.Create;
enlist:= TGpStringHashenumerator.Create(a);
for j:=1 to 10 do begin
if a.HasKey(inttostr(j)) then begin
fr:=a.ValueOf(inttostr(j));
a.Update(inttostr(j),fr+1);
end
else begin
a.Add(inttostr(j),1);
end;
end;
for i:=0 to a.Count -1 do begin
kv:=enlist.GetCurrent;
memo1.Lines.Add(kv.Key + inttostr(kv.value) );
end;
end; /// Division by Zero ERROr ///FindBucket(const key: string): cardinal;
回答: 您不正确地使用枚举器。不要在前面实例化它,总是使用 MoveNext 移动到下一个元素。
// fill 'a' as above
enlist := TGpStringHashenumerator.Create(a);
while enList.MoveNext do begin
kv:=enlist.GetCurrent;
memo1.Lines.Add(kv.Key + inttostr(kv.value) );
end;
【问题讨论】:
-
不要使用 TGpStringHash 的无参数构造函数。始终至少将哈希中的初始元素数量传递给 Create。
-
还是因为delphi版本不同?
-
我们将 Create 构造函数改为:a:=TGpStringHash.Create (num, true);//with param.没有错误提示,但是 memo1 生成的数据是一样的:都是'-1'。请告诉我们如何更改。
标签: delphi