我怎样才能连接或合并两个结构?

1331(30天)
我想将两个结构合并到一个新的结构包含两个原始结构的字段。我如何用MATLAB ?

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2023年3月30日
没有直接在MATLAB的能力,可以用来连接结构。
mergeStructs附加文件”。m”展示了一个数量的方法,可用于合并结构MATLAB。
也有网上提交,您可以使用MATLAB中央用户社区。就是这样一个提交:
注意MathWorks不担保或保证这些提交的使用或内容。任何问题,问题,或抱怨应该指向特约作者。
1评论
Royi Avital
Royi Avital 2020年5月23日
有一种方式是MATLAB代码友好吗?

登录置评。

更多的答案(7)

巴莫
巴莫 2019年11月12日
这是当且仅当没有常见的字段(重复字段)2的结构。
mergestructs = @ (x, y) cell2struct ([struct2cell (x); struct2cell (y)],[字段名(x); (y)]字段名);
我不明白为什么没有人指出了这一点。它是直观!
10评论
斯文浸出
斯文浸出 2023年4月17日
编辑:斯文浸出 2023年4月17日
mergestructs = @ (x, y) cell2struct ([struct2cell (x); struct2cell (y)],[字段名(x); (y)]字段名);
merged_structure = mergestructs (Struct1 Struct2)

登录置评。


詹姆斯
詹姆斯 2016年8月23日
你可以手动:
f =字段名(structA);
i = 1:长度(f)
structB。(f{我})= structA。(f{我})
结束
5个评论
马可·阿瓦洛斯
马可·阿瓦洛斯 2022年7月28日
这是一个简单的和清洁的解决方案

登录置评。


约翰·博蒙特
约翰·博蒙特 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)

Jiwon研
Jiwon研 2021年2月25日
如果两个结构相同的字段,你可以使用“猫”的功能。
结合=猫(1 structure1 structure2);
2的评论

登录置评。


彼得•柯林斯
彼得•柯林斯 2021年9月10日
我创建了连接函数来解决的情况当有重复的字段名结构。也许这可以帮助。
函数[c] = appendStruct (a, b)
% APPENDSTRUCT附加两种结构忽视重复
%开发附加两个结构体在处理非唯一
%字段名。默认保存过去的重复出现
%的附加结构。
ab = [struct2cell(一个);struct2cell (b)];
字段名abNames =[(一);字段名(b)];
(~,iab) =独特(abNames,“最后一次”);
c = cell2struct (ab (iab) abNames (iab));
结束
1评论
Nachiket Wadwankar
Nachiket Wadwankar 2022年9月14日
谢谢。这段代码为我的工作需求。

登录置评。


所罗门穆勒
所罗门穆勒 2018年2月21日
这不是一个解决方案。由于合并表的行数必须相同。
1评论
彼得·珀金斯
彼得·珀金斯 2018年2月21日
最初的问题是有些病构成——它可能引用两个标量结构或两个结构体数组。这是两个不同的东西,在不同的上下文中使用。
所罗门,你是正确的,如果两个结构体是标量,每个字段可能包含向量与不同长度(甚至更一般的东西),并将一个表不工作。
但如果两个结构体是标量的字段都包含相同的高度向量,或者两个结构体数组,每个元素在每个字段包含一个标量值,然后struct2table / table2struct将工作。
事实上,在这些情况下,最好甚至可能停止一半,用表。的好处之一表在标量表格数据,表的结构和结构体数组允许直接加下标在这两个维度。资料片结构体数组与M领域支持方便加下标为“行”,但一个标量结构与M领金宝app域每个包含一个资料片矢量不简化为多个字段加下标行。跨多个领域,既不支持任意金宝app加下标。

登录置评。


巴勃罗Nanez
巴勃罗Nanez 2021年11月12日
我也有过类似的问题,如何从一个结构替换值到另一个(某种合并两个结构之间),e和结构可以有几个水平。g, main.level1.level2.object。
这是我如何合并结构成一个更大的一部分,
例如,
一个。一个= 1;
一个。b = 2;
a.z。一个=1;
a.z。b = 2
一个=结构体字段:
1 b: 2 z:[1×1结构)
x。一个= -1;
x。b = 1;
疯子。x =“自闭症”
疯子=结构体字段:
谢:“自闭症”
所以,这个想法是遍历结构合并(在这种情况下,x)和替换的那部分结构在目标结构(在本例中)当没有更多的水平检查。也必须允许合并字段不存在在目标结构(在这种情况下机车)。
结果= mergeStructure (a, x)
结果=结构体字段:
1 b: 1 z: [1×1 struct]
注意现场z没有影响(即使它包含相同的字段名称本身)。您还可以使用相同的代码改变分区z
a.z= mergeStructure(a.z,x);
一个
一个=结构体字段:
1 b: 2 z:[1×1结构)
a.z
ans =结构体字段:
1 b: 1
最后,你也可以合并字段不存在在目标结构
结果= mergeStructure(疯子)
结果=结构体字段:
1 b: 2 z: [1×1 struct] x:“自闭症”
这是函数
函数[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尼克拉艾
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;
结束

登录置评。

下载188bet金宝搏


释放

R2006b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!