我怎样才能连接或合并两个结构?
1331(30天)
显示旧的评论
我想将两个结构合并到一个新的结构包含两个原始结构的字段。我如何用MATLAB ?
接受的答案
MathWorks支金宝app持团队
2023年3月28日
编辑:MathWorks支金宝app持团队
2023年3月30日
没有直接在MATLAB的能力,可以用来连接结构。
mergeStructs附加文件”。m”展示了一个数量的方法,可用于合并结构MATLAB。
也有网上提交,您可以使用MATLAB中央用户社区。就是这样一个提交:
注意MathWorks不担保或保证这些提交的使用或内容。任何问题,问题,或抱怨应该指向特约作者。
更多的答案(7)
巴莫
2019年11月12日
这是当且仅当没有常见的字段(重复字段)2的结构。
mergestructs = @ (x, y) cell2struct ([struct2cell (x); struct2cell (y)],[字段名(x); (y)]字段名);
我不明白为什么没有人指出了这一点。它是直观!
10评论
约翰·博蒙特
2017年9月12日
结构转换为表,然后合并表,然后将生成的表结构。
%创建1结构
aa_s。val1 = 1;
aa_s。val2 = 2;
%创建2结构
bb_s。val3 = 3;
bb_s。val4 = 4;
%转换结构表
aa_t = struct2table (aa_s);
bb_t = struct2table (bb_s);
% Concatonate表
merge_t = [aa_t, bb_t];
%转换表结构
merge_s = table2struct (merge_t)
彼得•柯林斯
2021年9月10日
我创建了连接函数来解决的情况当有重复的字段名结构。也许这可以帮助。
函数[c] = appendStruct (a, b)
% APPENDSTRUCT附加两种结构忽视重复
%开发附加两个结构体在处理非唯一
%字段名。默认保存过去的重复出现
%的附加结构。
ab = [struct2cell(一个);struct2cell (b)];
字段名abNames =[(一);字段名(b)];
(~,iab) =独特(abNames,“最后一次”);
c = cell2struct (ab (iab) abNames (iab));
结束
所罗门穆勒
2018年2月21日
这不是一个解决方案。由于合并表的行数必须相同。
1评论
彼得·珀金斯
2018年2月21日
最初的问题是有些病构成——它可能引用两个标量结构或两个结构体数组。这是两个不同的东西,在不同的上下文中使用。
所罗门,你是正确的,如果两个结构体是标量,每个字段可能包含向量与不同长度(甚至更一般的东西),并将一个表不工作。
但如果两个结构体是标量的字段都包含相同的高度向量,或者两个结构体数组,每个元素在每个字段包含一个标量值,然后struct2table / table2struct将工作。
事实上,在这些情况下,最好甚至可能停止一半,用表。的好处之一表在标量表格数据,表的结构和结构体数组允许直接加下标在这两个维度。资料片结构体数组与M领域支持方便加下标为“行”,但一个标量结构与M领金宝app域每个包含一个资料片矢量不简化为多个字段加下标行。跨多个领域,既不支持任意金宝app加下标。
巴勃罗Nanez
2021年11月12日
我也有过类似的问题,如何从一个结构替换值到另一个(某种合并两个结构之间),e和结构可以有几个水平。g, main.level1.level2.object。
这是我如何合并结构成一个更大的一部分,
例如,
一个。一个= 1;
一个。b = 2;
a.z。一个=1;
a.z。b = 2
x。一个= -1;
x。b = 1;
疯子。x =“自闭症”
所以,这个想法是遍历结构合并(在这种情况下,x)和替换的那部分结构在目标结构(在本例中)当没有更多的水平检查。也必须允许合并字段不存在在目标结构(在这种情况下机车)。
结果= mergeStructure (a, x)
注意现场z没有影响(即使它包含相同的字段名称本身)。您还可以使用相同的代码改变分区z
a.z= mergeStructure(a.z,x);
一个
a.z
最后,你也可以合并字段不存在在目标结构
结果= mergeStructure(疯子)
这是函数
函数[resultStruct] = mergeStructure (mainStruct struct2merge)
fields2merge =字段(struct2merge);
为ifieldsIn = fields2merge '
moreLevels = isstruct (struct2merge。(ifieldsIn {1}));
如果moreLevels
[valueInStructLeveli] = mergeStructure (mainStruct。(ifieldsIn {1}), struct2merge。(ifieldsIn {1}));
mainStruct。(ifieldsIn {1}) = valueInStructLeveli;
其他的
mainStruct。(ifieldsIn {1}) = struct2merge。(ifieldsIn {1});
结束
结束
resultStruct = mainStruct;
结束
1评论
Dimitrii尼克拉艾
2022年9月15日
为所有同伴,奇迹,为什么片段不嵌套结构与unnest运算合并是一个固定的版本:
函数[resultStruct] = mergeStructure (mainStruct struct2merge)
fields2merge =字段(struct2merge);
如果isempty (mainStruct) & & ~ isempty (struct2merge)
resultStruct = struct2merge;
返回;
elseif~ isempty (mainStruct) & & isempty (struct2merge)
resultStruct = mainStruct;
返回;
结束
为ifieldsIn = fields2merge '
moreLevels = isstruct (struct2merge。(ifieldsIn {1}));
如果moreLevels
[valueInStructLeveli] = mergeStructure ((mainStruct), struct2merge。(ifieldsIn {1}));
mainStruct。(ifieldsIn {1}) = valueInStructLeveli;
其他的
mainStruct。(ifieldsIn {1}) = struct2merge。(ifieldsIn {1});
结束
结束
resultStruct = mainStruct;
结束