今天的另一集“趣味结构”,这是一个艰难的一集。 我想通过给定长度的子字段列表动态创建嵌套结构,如下例所示:
x = 42;
a.e = struct;
subfields = {'b','c','d'}; %// arbitary length!
%// desired result
a.b.c.d = x;
如何做到这一点?
当然有一个邪恶的eval
解决方案,但我尽量避免成为邪恶。
evalexp = ['a' cellfun(@(s) ['.' s], subfields, 'uni',0)];
evalexp = [evalexp{:}];
eval( [evalexp '= x'])
答案 0 :(得分:7)
您可以使用setfield
:
x = 42;
a.e = struct;
subfields = {'b','c','d'};
a = setfield(a, subfields{:}, x);
返回:
>> a.b.c.d
ans =
42
答案 1 :(得分:3)
aa = x;
for i = numel(subfields):-1:2
aa = struct(subfields{i}, aa);
end
a.(subfields{1}) = aa;
我希望循环不被禁止:)