Matlab结构体之间相同字段的赋值
Matlab 结构体之间相同字段的赋值
假设有两个结构体 main_subject 和 all_subject 。其中 main_subject 中包含了某位同学的主修成绩和学号姓名信息,需要将这些信息地填到包含所有科⽬信息的另⼀个结构体 all_subject 对应的字段中(不存在的字段保持默认值),如何⽐较便利地实现呢?
all_subject =
包含以下字段的 struct:
Name: ''
ID: 0
Chinese: 0
Math: 0
English: 0
Physics: 0
History: 0
main_subject =
包含以下字段的 struct:
Name: 'Jake'
ID: 101
Chinese: 102
Math: 150
English: 122
具体的实现如下:
main_subject = struct('Name', 'Jake',...
'ID', 101, ...
'Chinese', 102,...
'Math', 150,...
'English', 122)
all_subject = struct('Name', '', ...
'ID', 0, ...
'Chinese', 0, ...
'Math', 0, ...
'English', 0, ...
'Physics', 0, ...
'History', 0)
cmb = structAssign(all_subject, main_subject)
function [structA] = structAssign(structA, structB)
% 将 structB 中与 structA 相同字段的成员的值赋值给 structA 对应的成员
keys = fieldnames(structB); % 获得结构体B的所有字段
for i = 1:length(keys)
cur_key = keys{i};
if isfield(structA, cur_key)
matlab数组赋值% 2017年后⽀持: structName.(dynamicExpression)
% dynamicExpression 是⼀个变量或表达式,返回字符串标量(结构体字段) % 类似于 getfield() 和 setfield() 功能
structA.(cur_key) = structB.(cur_key);
else
warming('字段"%s"不存在!', cur_key);
end
end
end
说明:
1. 不能直接赋值 all_subject = main_subject。直接赋值的结果是 all_subject 完全复制 main_subject,丢失了原来的部分字段。
2. 关于 Matlab 结构体常⽤的⼏个操作函数:
1. 创建结构体
2. 返回结构体的所有字段名称
3. 返回指定字段的值
4. 确定输⼊是否为结构体数组字段
5. 确定输⼊是否为结构体数组
6. 对结构体数组的字段进⾏排序
7. 删除结构体中的字段
8. 为结构体数组字段赋值
9. 将函数应⽤于每个数组元素
10. 对标量结构体的每个字段应⽤函数
11. 将表转换为结构体数组
12. 将结构体数组转换为表
13. 将元胞数组转换为结构体数组
14. 将结构体转换为元胞数组
3. Matlab2017版本之后,结构体可以基于变量的字段访问⽅式,常见的字段访问有
% ⽅式1
main_subject.Chinese = 123;
chinese = main_subject.Chinese;
% ⽅式2
main_subject.('Chinese') = 123;
chinese = main_subject.('Chinese');
% ⽅式3
main_subject = setfield(main_subject, 'Chinese', 123);
chinese = getfield(main_subject, 'Chinese');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论