有一个散列消息文件http://gpdelphiunits.googlecode.com/svn-history/r4/trunk/src/GpStringHash.pas
我们可以创建哈希并添加键值
问题1: 我们想知道如何迭代键值并将数据复制到listview。
问题2:有没有办法像分配方法那样快速复制?
非常感谢你。
亲爱的gabr,非常感谢您的即时回复和您的哈希文件。您的代码是否有doc或帮助文件或示例或演示?再次感谢你。
试试看,我不知道我哪里做错了 非常感谢。我刚刚使用了您的代码,但有以下错误提示。或者我犯了一些错误:
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;
答案 0 :(得分:1)
1)使用latest version。它为所有容器实现枚举器。
2)否。
编辑:
我已将内部GpStringHash测试应用程序提交到存储库。它可以作为如何使用GpStringHash类的演示服务器。
要枚举TGpStringHash,您可以使用
var
hash: TGpStringHash;
kv: TGpStringHashKV;
for kv in hash do
// do something with kv.Key and kv.Value
如果你使用的旧版Delphi不支持枚举器,你可以使用ForEach方法和外部回调方法。
procedure TGpStringHash.ForEach(enumerator: TGpStringHashEnumMethod);
var
enum: TGpStringHashEnumerator;
begin
enum := GetEnumerator;
try
while enum.MoveNext do
enumerator(enum.Current);
finally FreeAndNil(enum); end;
end; { TGpStringHash.ForEach }