我有一个不同深度的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};
答案 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
我很确定,会有更好的解决方案......仍然希望这有助于:)