如何快速从哈希复制到列表视图?

时间:2010-10-21 09:29:52

标签: delphi

有一个散列消息文件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;

1 个答案:

答案 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 }