可変長の構造体配列としてフィールドを含む構造体配列があります。例えば:
's' は構造体 'data' は 's' 内のフィールドであり、構造体配列自体でもあり、
length(s(n).data) ~= length(s(m).data)
すべてのフィールド s.data.timestamp からタイムスタンプを取得する配列を事前に割り当てたいと考えています。forループを2回使わずにこれを行う方法はありますか? これは私がこれまでに持っているものです:
% find the total length
count=0;
for x=1:length(s)
count=count+length(s(x).data);
end
% preallocate timestamp array
timestamp=zeros(1,count);
% populate timestamp array
index=1;
for x=1:length(s)
for y=1:length(s(x).data)
timestamp(index)=s(x).data(y).timestamp;
index=index+1;
end
end
「s」の長さと「data」の平均長に基づいて必要な長さを過大評価することを考えましたが、各「data」フィールド/サブ構造の実際の長さは大きく異なります。一体全体を過大評価し、後で結果の配列をトリミングする方がよいでしょうか? 私が扱っているデータセットではタイムスタンプをゼロにすることは不可能なので、問題にはなりません。