Matlab结构的递归连接

Jir*_*ler 4 matlab

是否有可能递归地连接两个matlab结构而不迭代其中一个结构的所有叶子.

例如

XA = 1;

XBC = 2;

YBD = 3;

雅= 4;

会产生以下结果

res = mergeStructs(x,y)

res.a = 4

res.bc = 2

res.bd = 3

Ram*_*nka 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
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).