Delphi中的THashTable
在Delphi中,Inifiles单元中有一个TStringHash的类,不过它的Value仅支持Integer(其实也不是问题,有其它类型可以将变量变为Pointer),有点不舒服,今天没事做就把它替换为variant了,其中Key的名称大小写无关,就是为了加快开发速度!
使用Hashtable,查找和删除复杂度都是常数级别的!
type
PPHashItem = ^PHashItem;
PHashItem = ^THashItem;
THashItem = record
Next: PHashItem;
Key: String;
Value: Variant;
end;
THashTable = class
private
Buckets: array of PHashItem;
protected
function Find(const Key: String): PPHashItem;
function HashOf(const Key: String): Cardinal; virtual;
public
constructor Create(Size: Cardinal = 256);
destructor Destroy; override;
procedure Put(const Key: String; Value: Variant);
procedure Clear;
procedure Remove(const Key: String);
function Modify(const Key: String; Value: Variant): Boolean;
function Get(const Key: String): Variant;
function ContainKey(const Key: String):boolean;
end;
procedure THashTable.Clear;
var
I: Integer;
P, N: PHashItem;
begin
for I := 0 to Length(Buckets) - 1 do
begin
P := Buckets[I];
while P <> nil do
begin
N := P^.Next;
Dispose(P);
P := N;
end;
Buckets[I] := nil;
end;
end;
function THashTable.ContainKey(const Key: String): boolean;
var
P: PHashItem;
begin
P := Find(Key)^;
if P <> nil then
begin
Result := True;
end
else
Result := False;
end;
constructor THashTable.Create(Size: Cardinal);
begin
inherited Create;
SetLength(Buckets, Size);
end;
destructor THashTable.Destroy;
begin
Clear;
inherited Destroy;
end;
function THashTable.Find(const Key: String): PPHashItem;
var
Hash: Integer;
begin
Hash := HashOf(Key) mod Cardinal(Length(Buckets));
Result := @Buckets[Hash];
while Result^ <> nil do
begin
if Result^.Key = Key then
Exit
else
Result := @Result^.Next;
end;
end;
functio
相关文档:
1、TStringList支持的最大行数是多少?(http://topic.csdn.net/t/20060209/14/4547405.html)
楼主结论:“TStringList的LoadfromFile函数应该只能读取15万行以内的数据,但TStringList和TList的Add函数可以加到几百万行(甚至更多)也不会出错。程序出错的原因应该是Add非法内存指针导致的,正如tanlim(求学者) &nb ......
现在应用系统流行用B/S开发,早几年前可是C/S的天下呢,我现在做的某航空公司货运结算维护工作,其系统就是利用Delphi开发的C/S应用程序!在日常的维护工作中,难免要对已经做好的COM+组件进行调试,以查看具体的处理逻辑!本文就是介绍在WindowsXP环境下如何在Delphi中调试COM+组件!
第一步:记录下你希望调试的COM+组件 ......
Delphi中Format字符串说明
function Format(const Format: string; const Args: array of const):
string;
Format字符串说明:
"%" [index ":"] ["-"] [width] ["." prec] type
(1)
格式化字符串必须以%开头
(2) [index ":"]
索引指的是Args参数列表中要显示的每一项的序号。比如:Args是
......
原文参见: http://blog.csdn.net/ingener/archive/2007/12/22/1958535.aspx
关于Delphi中DLL封装对象的几种方法整理及体会
Delphi用DLL来封装对象的技术主要有三种:
用接口实现
用纯虚和抽象类方法实现
用类引用实现
前两种,都是在DLL中生成类实例;第3种通过在调用方生成实例。三种方法的共同局限如下: ......
把以前做过的项目总结一下!参加工作以来一共用三种不同语言实现了获得文件夹及其子文件信息。为了方便以后使用总结一下
air实现:
private function getfile(filelist:File):Array{
var list:Array = filelist.getDirectoryListing();
var count:uint=list.length;
......