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*...
);

cell 配列の場合は追加の{}括弧が必要であることを忘れないでください。

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 に答える