Matlab:如何在带有for循环的结构中创建多个字段

时间:2016-02-07 11:57:57

标签: matlab

我需要在一个结构中创建一堆字段,其名称只有一个数字,例如:

S(1).field1 = [];
S(1).field2 = [];
S(1).field3 = [];
S(1).field4 = [];
S(1).field5 = [];

这是列表的简短版本。真正的一个实际上很长,在脚本中看起来不漂亮,所以我想知道我是否可以在for循环中启动那些空字段。我试过了:

for i = 1:5
    S(1).field{i} = [];
end

但它不起作用。

1 个答案:

答案 0 :(得分:2)

使用动态字段名称:这意味着S.field1 S.('field1')完全相同。在行动:

for k = 1:5
    S(1).(['field' num2str(k)]) = [];
end

请注意,我将循环变量更改为knum2str(i)如果您不小心,也可以返回0+1i

还有一些更时髦,看似无环的解决方案,例如:

n = 5;
S = cell2struct(cell(1,5),...
                arrayfun(@(x) ['field' num2str(x)],1:n,'uniformoutput',false),...
                2);

这将为字段值创建一个单元格{[],[],[],[],[]},为字段名称创建另一个单元格{'field1','field2',...,'field5'},并从中构建一个结构。