使用Matlab进行可变长度的结构

时间:2012-08-30 10:03:14

标签: matlab variables struct

我正在从结构中的进程收集数据,如下所示;

timepace(1,i) = struct(...
    'stageNo',str2num(stageNo), ...
    'split1', splits(1,1),...
    'split2', splits(1,2),...
    'split3', splits(1,3) );

然而,“分裂”的数量可以从2到10不等。目前我使用比上面显示的更长的代码来分配所有“分裂”,如果没有,则输入0.但这使我为具有如此多分裂的“以防万一”情况创建大量未使用的数据。 有没有办法让它的长度变得灵活?我知道所需的最终数字,因为它是我为每个查询输入的系统。

关于如何使其灵活并与长度变量相关的任何想法?

3 个答案:

答案 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);