如何比较两个 记录型变量的值:即不用比较记录里的每一个字段值?如: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 级别进行判断。而不是去比较它们的每一个字段,再确定它们是否相等。
...全文
72 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
  • 打赏
  • 举报
回复
只能一个一个字段判断,可以写个函数来判断每个字段是否相等,也不费事的。
内容概要:本文介绍了一个基于MATLAB实现的条件随机场(CRF)模,用于锂电池剩余寿命(RUL)预测的完整项目。通过构建线性链CRF框架,结合电池退化过程的时序特性,利用电压、电流、温度、容量等多源特征进行序列化建模,实现了对电池健康状态演化的联合概率推断。文章详细阐述了项目背景、目标与挑战,提出了应对特征构建困难、计算复杂度高及MATLAB环境下从零实现CRF难题的解决方案,并给出了完整的模架构设计,包括节点势函数、边势函数、训练优化策略与RUL映射方法。配套代码示例涵盖数据预处理、特征提取、状态离散化、CRF参数结构定义、前向后向算法实现、维特比解码及预测误差评估等关键环节,具备高度可复现性与工程实用性。; 适合人群:具备一定机器学习基础和MATLAB编程能力,从事电池健康管理、预测性维护、数据驱动建模等相关领域的科研人员、工程师及研究生。; 使用场景及目标:①提升锂电池剩余寿命预测精度,尤其在复杂工况和长期外推场景下增强鲁棒性;②构建具有时序感知能力的判别式概率模框架,弥补传统静态回归方法对退化过程动态性建模不足的问题;③增强模可解释性,为电池管理系统的安全预警与运维决策提供支持;④为后续融合深度学习特征提取器或多源信息融合提供可扩展的技术基础。; 阅读建议:此资源以实际工程项目为导向,强调从理论到代码落地的全流程实践,建议读者结合提供的MATLAB代码逐模块调试运行,重点关注特征工程设计、CRF目标函数梯度计算、数稳定性处理以及状态到RUL的映射逻辑,在理解概率图模本质的同时掌握其在工业预测任务中的工程化实现技巧。

5,939

社区成员

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

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