是否有可能递归地连接两个matlab结构而不迭代其中一个结构的所有叶子.
例如
XA = 1;
XBC = 2;
YBD = 3;
雅= 4;
会产生以下结果
res = mergeStructs(x,y)
res.a = 4
res.bc = 2
res.bd = 3
以下功能适用于您的特定示例.会有一些它没有考虑的事情,所以如果有其他情况你希望它能够工作,请告诉我,我可以更新.
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
Run Code Online (Sandbox Code Playgroud)
然后res = mergeStructs(x,y);给出:
>> res.a
ans =
4
>> res.b
ans =
c: 2
d: 3
Run Code Online (Sandbox Code Playgroud)
根据您的要求.
编辑:我添加isstruct(x) &&到第一行.旧版本工作正常,因为isfield(x,n)返回0if ~isstruct(x),但如果y是一个大结构,新版本会稍快一点~isstruct(x).