1

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

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

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

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

4

3 回答 3

2

你可以使用类似的东西

S = struct('stageNo',str2num(stageNo));

for jj = 1:size(splits,2)
    S.(['split' num2str(jj)]) = splits(1,jj);
end

timepace(1,i) = S;

它被称为“动态字段引用”。例如,您可以在此处找到更多信息。

于 2012-08-30T10:08:22.167 回答
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 的答案。

于 2012-08-30T10:37:30.143 回答
0

您还可以使用 cell2struct:

 labels = {'split1','split2','split3',...}
 c = num2cell(splits);
 f = labels(1:numel(c));
 s = cell2struct(c,f,2);
于 2012-08-30T10:45:33.977 回答