我正在从结构中的进程收集数据,如下所示;
timepace(1,i) = struct(...
'stageNo',str2num(stageNo), ...
'split1', splits(1,1),...
'split2', splits(1,2),...
'split3', splits(1,3) );
然而,“分裂”的数量可以从2到10不等。目前我使用比上面显示的更长的代码来分配所有“分裂”,如果没有,则输入0.但这使我为具有如此多分裂的“以防万一”情况创建大量未使用的数据。 有没有办法让它的长度变得灵活?我知道所需的最终数字,因为它是我为每个查询输入的系统。
关于如何使其灵活并与长度变量相关的任何想法?
答案 0 :(得分:2)
您可以使用类似
的内容S = struct('stageNo',str2num(stageNo));
for jj = 1:size(splits,2)
S.(['split' num2str(jj)]) = splits(1,jj);
end
timepace(1,i) = S;
它被称为“动态字段引用”。例如,您可以找到更多信息here。
答案 1 :(得分:0)
只需使用数组而不是struct
:
timepace(1,i) = struct(...
'stageNo',str2num(stageNo), ...
'split', *PUT HERE YOUR ARRAY*...
);
不要忘记,对于单元格数组,您需要额外的{}
括号。
timepace(1,i) = struct(...
'stageNo',str2num(stageNo), ...
'split', {{1,2,3,4,5}}...
);
如果您必须使用struct
,请参阅Rodys的答案。
答案 2 :(得分:0)
你也可以使用cell2struct:
labels = {'split1','split2','split3',...}
c = num2cell(splits);
f = labels(1:numel(c));
s = cell2struct(c,f,2);