我有一个字段名列表,并希望生成一个嵌套的结构.我试过这个:
fn1 = {'a', 'b', 'c'};
fn2 = {'d', 'e', 'f'};
s = struct();
for n1=fn1
for n2=fn2
s.(n1).(n2) = 0 ;
end
end
Run Code Online (Sandbox Code Playgroud)
但Matlab抱怨表示".{fieldname)"仅用于动态结构引用("动态结构引用的参数必须计算为有效的字段名称.").
我知道一个有效的解决方案是使用isfield()和struct()遍历字段名称.那么如何在不使用isfield()和struct()的情况下实现这一目标,例如通过一些匿名函数和向量化?谢谢
您的主要问题是n1并且n2是单元数组,它们不是有效的结构名称.因此,写作
s.(n1{1}).(n2{1}) = 0;
Run Code Online (Sandbox Code Playgroud)
修复错误.
但是,更好的方法可能是使用CELL2STRUCT来创建s:
s2 = cell2struct(cell(size(fn2(:))),fn2(:));
s = cell2struct(repmat({s2},size(fn1(:))),fn1(:))
Run Code Online (Sandbox Code Playgroud)