当前位置:主页>销售管理软件> 列表

谁有一个好的HASH表类。能否告诉我??? 找商品库存管理软件

库存管理软件版1楼: 使用THashedStringlist类,好像无法将一个结构保存在这个HASH表中。请各位帮助!!!

2楼: 以前看过,inifiles中有一个THashedStringList你可以看一下。 如商品库存管理软件

3楼: “好像无法将一个结构保存在这个HASH表中”
可以的,HASH表中每个元素可以有一项,可以将其设为指针类型
,然后就可以存取,其实这和HASH表没什么关系,HASH只是一种加
快查找速度的算法而已。

4楼: 下面是我的程序好像有问题,请帮助看看:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IniFiles;
type
tagTest = record
Num:Integer;
Name:String[20];
end;
TTest=tagTest;
PTest=^tagTest;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
h: THashedStringlist;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Test:TTest;
begin
//New(Test);
Test.Num:=10;
Test.Name:=''asdf'';
h.AddObject(''1'',Test);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
h:=THashedStringlist.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Num:Integer;
Test:PTest;
Str:String;
TestInt:Integer;
Test2:TObject;
begin
if h.Find(''1'',Num) then
begin
Test2:=h.Objects[NUM];
Test:=PTest(Test2);
Str:=Test.Name;
TestInt:=Test.Num;
Application.MessageBox(Pchar(IntToStr(TestInt)),''asd'',MB_OK);
end;
end;

end.

5楼: unit ss;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;

type
tagTest = record
Num:Integer;
Name:String[20];
end;
TTest=tagTest;
PTest=^tagTest;



TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
h: THashedStringlist;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Test:PTest;
begin
New(Test);
Test.Num:=10;
Test.Name:=''asdf'';
h.AddObject(''1'',TObject(Integer(Test)));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
h:=THashedStringlist.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Num:Integer;
Test:PTest;
Str:String;
TestInt:Integer;


Test2:TObject;
begin
if h.Find(''1'',Num) then
begin
Test2:=h.Objects[NUM];
Test:=PTest(Test2);
Str:=Test.Name;
TestInt:=Test.Num;
Application.MessageBox(Pchar(IntToStr(TestInt)),''asd'',MB_OK);
end;
end;

end.

6楼: 你的用法好像不太正规,自己先看看吧/

库存管理软件版7楼: 这两句
Test2:=h.Objects[NUM];
Test:=PTest(Test2);
可以合成一句

test := PTest(Integer(h.Objects[NUM]));

8楼: 上面的代码是正确可是如果在这个HASH表中加入两条记录的话。调用FIND函数时总是为FALSE的。不知道是不是一个BUG或者是我用法不对!!代码如下:
unit Unit1;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;

type
tagTest = record
Num:Integer;
Name:Pchar;
end;
TTest=tagTest;
PTest=^tagTest;



TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);


procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
h: THashedStringlist;
I:Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Test:PTest;
begin
Inc(I);
New(Test);
Test.Num:=10;
Test.Name:=''asdf'';
h.AddObject(''zgc7622'',TObject(Integer(Test)));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
h:=THashedStringlist.Create;
I:=0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Num:Integer;
Test:PTest;
Str:Pchar;
TestInt:Integer;
Test2:TObject;
begin
if h.Find(''12345'',Num) then
begin
Test2:=h.Objects[NUM];
Test:=PTest(Test2);
Str:=Test.Name;
TestInt:=Test.Num;
Application.MessageBox(Str,''asd'',MB_OK);

end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
Test:PTest;
begin
New(Test);
Test.Num:=10;
Test.Name:=''asdf'';
h.AddObject(''12345'',TObject(Integer(Test)));
end;

end.

9楼: 接受答案了.