如何比较两个 记录型变量的值:即不用比较记录里的每一个字段值?如:if a=b a,b为记录型变量。--希望能给出解决思路。

wangshaodong 2002-07-25 03:23:26
type
Myrecord=record
a1:integer;
a2:string;
end;
var
Rec1:Myrecord;
Rec2:Myrecord;
implementation
rec1.a1:=1;
rec1.a2:='1';

rec2:=rec1;
//change rec1
rec1.a1:=2;
if rec2=rec1 then domything;//这里不能通过;想解决的就是在rec1 级别进行判断。而不是去比较它们的每一个字段,再确定它们是否相等。
...全文
47 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
iroi 2002-07-25
  • 打赏
  • 举报
回复
function TForm1.CompareRec(a,b:Myrecord):boolean;
begin
Result := False;
Result := (a.a1=b.a1) and (a.a2 = b.a2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
rec1.a1:=1;
rec1.a2:='1';

rec2:=rec1;
//change rec1
rec1.a1:=2;
if CompareRec(rec1,rec2) then ShowMessage('=') else ShowMessage('<>');

end;
windofsun 2002-07-25
  • 打赏
  • 举报
回复
为什么我和伴水帮主同时回复,我的就在后面?
Liujc 2002-07-25
  • 打赏
  • 举报
回复
我不知道有没有直接记录比较函数。但是你可以通过记录变量对应的内存进行判断。
windofsun 2002-07-25
  • 打赏
  • 举报
回复
用指针来判断
function CompareMem(P1, P2: Pointer; Length: Integer): Boolean; assembler;
王集鹄 2002-07-25
  • 打赏
  • 举报
回复
//通过比较内存实现
//CompareMem()

procedure TForm1.Button1Click(Sender: TObject);
var
A, B: TRect;
begin
A := Rect(1, 2, 3, 4);
B := Rect(1, 2, 3, 4);
if CompareMem(@A, @B, SizeOf(TRect)) then
ShowMessage('No.1 相等')
else ShowMessage('No.1 不相等');

A := Rect(1, 2, 3, 4);
B := Rect(1, 2, 3, 5);
if CompareMem(@A, @B, SizeOf(TRect)) then
ShowMessage('No.2 相等')
else ShowMessage('No.2 不相等');
end;

procedure TForm1.Button2Click(Sender: TObject);
type
TMyRecord = record //记录类型大小必须固定
a1: Integer;
a2: ShortString; //不能用动态长度的类型//即:不能用string
end;
var
Rec1: TMyrecord;
Rec2: TMyrecord;
begin
Rec1.a1 := 1;
Rec1.a2 := '1';

Rec2 := rec1;
Rec1.a1 := 1;
if CompareMem(@Rec1, @Rec2, SizeOf(TMyRecord)) then
ShowMessage('No.3 相等')
else ShowMessage('No.3 不相等');
end;
王集鹄 2002-07-25
  • 打赏
  • 举报
回复
//通过比较内存实现
//CompareMem()

procedure TForm1.Button1Click(Sender: TObject);
var
A, B: TRect;
begin
A := Rect(1, 2, 3, 4);
B := Rect(1, 2, 3, 4);
if CompareMem(@A, @B, SizeOf(TRect)) then
ShowMessage('No.1 相等')
else ShowMessage('No.1 不相等');

A := Rect(1, 2, 3, 4);
B := Rect(1, 2, 3, 5);
if CompareMem(@A, @B, SizeOf(TRect)) then
ShowMessage('No.2 相等')
else ShowMessage('No.2 不相等');
end;

procedure TForm1.Button2Click(Sender: TObject);
type
TMyRecord = record //记录类型大小必须固定
a1: Integer;
a2: ShortString; //不能用动态长度的类型//即:不能用string
end;
var
Rec1: TMyrecord;
Rec2: TMyrecord;
begin
Rec1.a1 := 1;
Rec1.a2 := '1';

Rec2 := rec1;
Rec1.a1 := 1;
if CompareMem(@Rec1, @Rec2, SizeOf(TMyRecord)) then
ShowMessage('No.3 相等')
else ShowMessage('No.3 不相等');
end;
Liujc 2002-07-25
  • 打赏
  • 举报
回复
我不知道有没有直接记录比较函数。但是你可以通过记录变量对应的内存进行判断。
friendkey 2002-07-25
  • 打赏
  • 举报
回复
只能一个一个字段判断,可以写个函数来判断每个字段是否相等,也不费事的。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧