为任意嵌套的Matlab结构赋值

时间:2014-09-02 11:22:13

标签: matlab structure

我有一个不同深度的Matlab结构,类似于:

f.A = 1;
f.B.alpha = 20;
f.B.beta  = 30;

现在假设您有一个给定的输入(比如'ctrl'),它指定要重新分配的值,使用字符串标识涉及的字段名。一个例子是:

ctrl = {'B.alpha', 200};

这意味着我们应该将f.B.alpha重新分配给200.对于具有任意“深度”(或级别数)的ctrl中的字段名,您将如何系统地实现此?速度会很好,但这不是问题。

最终,我想应用一系列重新分配,例如:

ctrl = {'B.alpha', 200; 
        'A', -10};

1 个答案:

答案 0 :(得分:2)

我只是有一个快速而肮脏的解决方案,可以扩展为一般解决方案:

f.A = 1;
f.B.alpha = 20;
f.B.beta  = 30;

ctrl = {'B.alpha', 200, 'A', 10};
for ind =1:2:length(ctrl)-1
    t=strsplit(ctrl{ind},'.');
    if length(t)==2
        f = setfield(f,t{1},t{2}, ctrl{ind+1});
    else
        f = setfield(f,ctrl{ind}, ctrl{ind+1});
    end
end

仔细查看:setfield

我很确定,会有更好的解决方案......仍然希望这有助于:)