我需要在结构中创建一堆字段,其名称仅相差一个数字,如下所示:
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
但它不起作用。
最佳答案
使用动态字段名称:这意味着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'}
作为字段名称,并从中构造一个结构体。
关于Matlab:如何使用 for 循环在结构中创建多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35253165/