以某种方式可以递归地连接两个matlab结构而不迭代其中一个结构的所有叶子。
例如
x.a = 1;
x.b.c = 2;
y.b.d = 3;
y.a = 4;
将导致以下
res = mergeStructs(x,y)
res.a = 4
res.b.c = 2
res.b.d = 3
答案 0 :(得分:6)
以下功能适用于您的特定示例。会有一些它没有考虑的事情,所以如果有其他情况你想让它工作,请告诉我,我可以更新。
function res = mergeStructs(x,y)
if isstruct(x) && isstruct(y)
res = x;
names = fieldnames(y);
for fnum = 1:numel(names)
if isfield(x,names{fnum})
res.(names{fnum}) = mergeStructs(x.(names{fnum}),y.(names{fnum}));
else
res.(names{fnum}) = y.(names{fnum});
end
end
else
res = y;
end
然后res = mergeStructs(x,y);
给出:
>> res.a
ans =
4
>> res.b
ans =
c: 2
d: 3
根据您的要求。
编辑:我在第一行添加了isstruct(x) &&
。旧版本运行正常,因为如果isfield(x,n)
0
返回~isstruct(x)
,但如果y
是一个大结构~isstruct(x)
,新版本会稍快一些。