在游戲開發(fā)中經(jīng)常需要保存一些數(shù)據(jù)結(jié)構(gòu),并且在使用的時(shí)候需要快速的查找出來.Hash表正是為了提高檢索速度而設(shè)計(jì)出來的.下面我就將我在用Delphi開發(fā)中使用Hash表的方法寫出來,希望對(duì)大家有一定的幫助!
在Delphi中有一個(gè)THashedStringlist類,使用這個(gè)類可以實(shí)現(xiàn)Hash表的操作.使用這個(gè)類需要引用IniFiles頭文件.
例如:我們定義的數(shù)據(jù)結(jié)構(gòu)是:
Word-WRAP: break-Word" bgColor=#f3f3f3>以下是引用片段:
RTest = record
Key:Integer;
Name:String[20];
Sex:Boolean;
Age:Integer;
end;
PTest = ^RTest ;
1:創(chuàng)建Hash表.
ScHash:=THashedStringlist.Create;
2:將數(shù)據(jù)結(jié)構(gòu)加入Hash表中.
var
Index:Integer;
p_Test:PTest;
Index:=ScHash.IndexOf(IntToStr(p_Test.Key));
if Index=-1 then
begin
ScHash.AddObject(IntToStr(p_Test.Key),TObject(Integer(p_Test)));
end;
在加入Hash表的時(shí)候,首先我們檢查看這個(gè)Key是否在Hash表中,如果Index=-1則說明此Key不在Hash表中,則我們將這個(gè)結(jié)構(gòu)指針加入到Hash表中.
3:將數(shù)據(jù)結(jié)構(gòu)從Hash表中刪除.
以下是引用片段:
var
Index:Integer;
t_Object: TObject;
Index:=ScHash.IndexOf(IntToStr(p_Test.Key));
if Index<>-1 then
begin
t_Object:=ScHash.Objects[Index];
ScHash.Delete(Index);
end;
4:刪除Hash表
在刪除Hash表的時(shí)候和一般的Tlist刪除一樣,使用Free.
ScHash.Free;
在Delphi中有一個(gè)THashedStringlist類,使用這個(gè)類可以實(shí)現(xiàn)Hash表的操作.使用這個(gè)類需要引用IniFiles頭文件.
例如:我們定義的數(shù)據(jù)結(jié)構(gòu)是:
Word-WRAP: break-Word" bgColor=#f3f3f3>以下是引用片段:
RTest = record
Key:Integer;
Name:String[20];
Sex:Boolean;
Age:Integer;
end;
PTest = ^RTest ;
1:創(chuàng)建Hash表.
ScHash:=THashedStringlist.Create;
2:將數(shù)據(jù)結(jié)構(gòu)加入Hash表中.
var
Index:Integer;
p_Test:PTest;
Index:=ScHash.IndexOf(IntToStr(p_Test.Key));
if Index=-1 then
begin
ScHash.AddObject(IntToStr(p_Test.Key),TObject(Integer(p_Test)));
end;
在加入Hash表的時(shí)候,首先我們檢查看這個(gè)Key是否在Hash表中,如果Index=-1則說明此Key不在Hash表中,則我們將這個(gè)結(jié)構(gòu)指針加入到Hash表中.
3:將數(shù)據(jù)結(jié)構(gòu)從Hash表中刪除.
以下是引用片段:
var
Index:Integer;
t_Object: TObject;
Index:=ScHash.IndexOf(IntToStr(p_Test.Key));
if Index<>-1 then
begin
t_Object:=ScHash.Objects[Index];
ScHash.Delete(Index);
end;
4:刪除Hash表
在刪除Hash表的時(shí)候和一般的Tlist刪除一樣,使用Free.
ScHash.Free;