2010-10-21 29 views
1

有一个哈希PAS文件http://gpdelphiunits.googlecode.com/svn-history/r4/trunk/src/GpStringHash.pas如何从哈希快速复制到列表视图?

我们可以创建哈希并添加键 - 值

问题1: 我们想知道如何遍历键 - 值和数据复制到列表视图。

问题2:有没有像分配方法那样快速复制的方法?

非常感谢您提前。

尊敬的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; 
+0

不要使用TGpStringHash的无参数构造函数。 Allways至少将哈希中元素的初始数量传递给Create。 – gabr 2010-10-21 11:20:26

+0

或者是由于不同的delphi版本? – Dylan 2010-10-21 11:21:41

+0

我们将创建构造函数更改为:a:= TGpStringHash.Create(num,true); // with param。没有错误提示,但memo1会生成相同的数据:它们都是'-1'。请让我们知道如何改变。 – Dylan 2010-10-21 12:03:38

回答

1

1)使用latest version。它为所有容器实现枚举器。

2)号

编辑:

我犯了我的内部GpStringHash测试应用程序到存储库。它可以作为关于如何使用GpStringHash类的演示服务器。

要列举TGpStringHash如果你使用的是老式的Delphi不支持普查员你会用

var 
    hash: TGpStringHash; 
    kv: TGpStringHashKV; 

for kv in hash do 
    // do something with kv.Key and kv.Value 

,你可以使用的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 } 
+0

尊敬的gabr, 非常感谢您的即时回复和散列文件。 是否有文档或帮助文件或示例或演示代码? 非常感谢你。 – Dylan 2010-10-21 09:50:08

+0

不,不,不是: – gabr 2010-10-21 09:55:26

+0

更新:示例/演示现在存储在SVN中 – gabr 2010-10-21 10:41:37