Hash table ,也叫做字典,是任何数据结构教材都会提到,O(0)的访问性能让它得到很广阔的应用,STL中也有map,hashmap,当然map一般是使用平衡BST来实现的,但是外部使用接口和hash table差不多。

dict和list,scalar(string和numbers)组成了python,perl等脚本语言中基本数据元素。在各种程序应用中,相当大部分计算是在处理字符串,很多情况下,hash table会给字符串处理提供极大的方便。

Delphi 自带的Contnrs中TBucketList实现了Key-value的访问接口,但它内部实现却是o(n)的数组

JEDI提供了一个TStringHashMap,这个到是真正的hashmp,我没有用过,但是按照jedi的正常品质,性能应该不错。

我要推荐的是Hashes.pas,作者是Ciaran McCreesh,早就停止更新了,它提供了3个类,TIntegerHash,TObjectHash,TStringHash,从名字就可以知道它们k-v对中的value类型分别为integer,object,string。我在n个项目中都使用了它,用法很简单

uses Hashes
var
hash:TObjectHash
begin
//new
hash:=TObjectHash.Create;
 
//add value
hash['test']:= TObject.create;
 
//search
if hash.Exists('test') then
 
//foreach
hash.Restart;
while hash.Next do
begin
key:=Hash.CurrentKey;
value:=hash[key];
end
 
//delete
hash.Free;
end
  • 我做了一点修改,TObjectHash['key']如果不存在,返回nil,原文件是抛出一个异常。
  • 程序=数据结构+定义在数据结构上的运算
  • delphi多是用来处理用户界面和数据库相关应用,delphi程序员很少自己创建各种数据结构,最多的是使用TStringlist和各种TQuery,TTable在内存中存放数据,或者就是定义各种record,用一个TList来存放,这中间有delphi自己的缺陷,但是Delphi ‘er们是否也应该思考一下呢?

delphi hash table 完整源代码下载: http://lutaf.com/download/delphi_hash.zip

本文地址: http://lutaf.com/24.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接