按子字段列表更新嵌套结构

时间:2017-06-02 15:26:27

标签: matlab struct eval

今天的另一集“趣味结构”,这是一个艰难的一集。 我想通过给定长度的子字段列表动态创建嵌套结构,如下例所示:

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'])

2 个答案:

答案 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;

我希望循环不被禁止:)