MATLAB中如何合并两个字段唯一的结构体?
How to Merge Two Unique-Field Structures in MATLAB Efficiently
我之前也碰到过这个MATLAB结构体合并的麻烦事儿,手动一个个加字段真的太折磨人了,后来琢磨出了几个优雅的解决方案,分享给你:
问题场景:现有两个字段完全不重复的结构体:
% 结构体1 S_1.a = 1; S_1.b = 2; S_1.c = 3; % 结构体2 S_2.d = 1; S_2.e = 2;需要合并成一个包含所有字段的结构体,但MATLAB没有内置的自动合并命令,手动逐个添加字段既繁琐又低效。
优雅高效的合并方法
方法1:动态字段赋值批量添加
这种方法逻辑清晰,通用性强,就算后续结构体字段有增减,代码也不用修改:
% 以S_1为基础初始化合并后的结构体 merged_struct = S_1; % 获取S_2的所有字段名 s2_field_names = fieldnames(S_2); % 循环批量把S_2的字段和值添加进去 for idx = 1:length(s2_field_names) current_field = s2_field_names{idx}; merged_struct.(current_field) = S_2.(current_field); end
方法2:结构体数组转结构体(更紧凑)
如果确定两个结构体没有重复字段,可以用这个更简洁的写法:
% 将两个结构体打包成结构体数组 struct_array = [S_1, S_2]; % 转换为单元格数组并合并所有字段值 merged_cell_data = struct2cell(struct_array); % 合并字段名并转换回结构体 merged_struct = cell2struct(merged_cell_data, [fieldnames(S_1); fieldnames(S_2)], 1);
重要提示:如果两个结构体存在重复字段,上述两种方法都会用后一个结构体的字段值覆盖前一个的,所以一定要确保字段唯一再使用哦!
内容的提问来源于stack exchange,提问作者Mark_Anderson
相关产品推荐
相关产品推荐

