我需要在一个结构中创建一堆字段,其名称只有一个数字,例如:
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
但它不起作用。
答案 0 :(得分:2)
使用动态字段名称:这意味着S.field1
与 S.('field1')
完全相同。在行动:
for k = 1:5
S(1).(['field' num2str(k)]) = [];
end
请注意,我将循环变量更改为k
:num2str(i)
如果您不小心,也可以返回0+1i
。
还有一些更时髦,看似无环的解决方案,例如:
n = 5;
S = cell2struct(cell(1,5),...
arrayfun(@(x) ['field' num2str(x)],1:n,'uniformoutput',false),...
2);
这将为字段值创建一个单元格{[],[],[],[],[]}
,为字段名称创建另一个单元格{'field1','field2',...,'field5'}
,并从中构建一个结构。