Delphi中的hash table

    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

可以从这里下载Hashes.rar
我做了一点修改,TObjectHash['key']如果不存在,返回nil,原文件是抛出一个异常。
程序=数据结构+定义在数据结构上的运算。
delphi多是用来处理用户界面和数据库相关应用,delphi程序员很少自己创建各种数据结构,最多的是使用TStringlist和各种TQuery,TTable在内存中存放数据,或者就是定义各种record,用一个TList来存放,这中间有delphi自己的缺陷,但是Delphi 'er们是否也应该思考一下呢?

你可能感兴趣的:(Delphi)