使用THashedStringList管理结构体数据()
2015-09-02 23:54
495 查看
准备做一个爬虫程序,目测需要查找的数量级略大,使用THashedStringList来管理,方便直接name,value这样查找数据并快速得到结果。写个小demo备忘。
直接上代码,比较简单,多线程使用时加个互斥,不知道效率如何。
直接上代码,比较简单,多线程使用时加个互斥,不知道效率如何。
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,System.IniFiles, Vcl.StdCtrls; type TUrlInfo=packed record sKey:string[20]; sTitle:string[255]; sUrl:string[255]; iDepth:Integer; end; PUrlInfo=^TUrlInfo; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Edit1: TEdit; Button3: TButton; Button4: TButton; Button5: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; myHashList:THashedStringList; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);{添加} var myPUrlInfo:PUrlInfo; begin New(myPUrlInfo); myPUrlInfo.sKey:=Edit1.Text; myPUrlInfo.sTitle:=Format('sTitle<%d>',[Random(9999)]); myPUrlInfo.sUrl:= Format('URL<%d>',[Random(9999)]); myPUrlInfo.iDepth:=1; if myHashList.IndexOf(myPUrlInfo.sKey)=-1 then begin myHashList.AddObject(myPUrlInfo.sKey,TObject(myPUrlInfo)) end else begin Memo1.Lines.Add('无法添加,已经存在。'); end; end; procedure TForm1.Button2Click(Sender: TObject); {查找} var iIndex:Integer; myPUrlInfo:PUrlInfo; begin iIndex:=myHashList.IndexOf(Edit1.Text); if iIndex<>-1 then begin with PUrlInfo(myHashList.Objects[iIndex])^ do begin Memo1.Lines.Add(format('找到指定项目:Title:%s Url:%s',[sTitle,sUrl])); end; end else begin Memo1.Lines.Add('未找到指定项目。'); end; end; procedure TForm1.Button3Click(Sender: TObject); {删除} var iIndex:Integer; myPUrlInfo:PUrlInfo; begin iIndex:=myHashList.IndexOf(Edit1.Text); if iIndex<>-1 then begin myPUrlInfo:=PUrlInfo(myHashList.Objects[iIndex]); myHashList.Delete(iIndex); Dispose(myPUrlInfo); Memo1.Lines.Add('删除完毕。') end else begin Memo1.Lines.Add('未找到指定项目。'); end; end; procedure TForm1.Button4Click(Sender: TObject); {修改} var iIndex:Integer; myPUrlInfo:PUrlInfo; begin iIndex:=myHashList.IndexOf(Edit1.Text); if iIndex<>-1 then begin with PUrlInfo(myHashList.Objects[iIndex])^ do begin sTitle:=Format('NewsTitle<%d>',[Random(9999)]); sUrl:= Format('NewURL<%d>',[Random(9999)]); Memo1.Lines.Add(format('找到指定项目:Title:%s Url:%s',[sTitle,sUrl])); end; end else begin Memo1.Lines.Add('未找到指定项目。'); end; end; procedure TForm1.Button5Click(Sender: TObject);{遍历} var i:Integer; begin for i := 0 to myHashList.Count-1 do begin with PUrlInfo(myHashList.Objects[i])^ do begin Memo1.Lines.Add(Format('[%d]:Key:%s Title:%s Url:%s',[I+1,sKey,sTitle,sUrl])); end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin myHashList:=THashedStringList.Create; Randomize; end; end.
相关文章推荐
- c语言实现hashmap(转载)
- Delphi实现http发送xml文件片段
- Delphi实现毫秒级别的倒计时实例代码
- Delphi7中Listview的常用功能汇总
- 插件管理框架 for Delphi(一)
- delphi中一个值得大家来考虑的DLL问题
- Delphi实现检测并枚举系统安装的打印机的方法
- delphi 正弦曲线图
- Delphi下OpenGL2d绘图之画四边形的方法
- Delphi实现木马文件传输代码实例
- delphi建立、读取、存贮INI文件的方法《三》
- Delphi控件ListView的属性及使用方法详解
- delphi制作wav文件的方法
- Delphi下OpenGL2d绘图之画点的方法
- Delphi下OpenGL2d绘图之初始化流程详解
- Delphi实现窗体感知鼠标滑过并自动隐藏与显示窗口的方法
- Delphi实现截屏存盘的方法
- Delphi实现碰撞球体完整实例代码
- delphi建立、读取、存贮INI文件的方法《二》
- Delphi解析FTP地址的方法