# How to create new structure with each for loop?

22 ビュー (過去 30 日間)
Nicholas Kavouris 2022 年 4 月 10 日
コメント済み: Stephen23 2022 年 4 月 10 日
I am trying to take a large dataset with mutlple fields and segment it and place it into unique structure with each for loop
if numel(start)==numel(stop)
for k=1:numel(start);
j=start(k):stop(k)+900;
field1="number"; value1=k;
field2='grill_state'; value2=grill_state(j) ;
field3='Set_Temp'; value3=SetTempF(j);
field4='TempF'; value4=Temp_F(j);
field5='AugerRPM'; value5=Auger_RPM(j);
strcat('Cook',num2str(k))=struct(field1,value1,field2,value2,field3,value3,field4,value4,field5,value5);
end
end
The goal is to take all values indexed between start and stop and place them into a structure titled Cookn for 1-n number of cooks.
so if there are 5 start points then loop should return struct cook1-cook5. Where am i going wrong?
##### 1 件のコメント表示 なし非表示 なし
Stephen23 2022 年 4 月 10 日
"Where am i going wrong?"
You are trying to force numbers into variable names.
Doing so is possible, but only if you want to write slow, complex, inefficient, buggy code:
The neat, simple, and very efficient MATLAB approach is to use indexing, just as Matt J shows.

サインインしてコメントする。

### 採用された回答

Matt J 2022 年 4 月 10 日
if numel(start)==numel(stop)
N=numel(start);
clear Cook
for k=N:-1:1
j=start(k):stop(k)+900;
Cook(k).number=k;
Cook(k).grill_state=grill_state(j) ;
Cook(k).Set_Temp=SetTempF(j);
Cook(k).TempF=Temp_F(j);
Cook(k).AugerRPM=Auger_RPM(j);
end
end
##### 2 件のコメント表示 1 件の古いコメント非表示 1 件の古いコメント
Matt J 2022 年 4 月 10 日
The backward loop forces Matlab to create the Nth structure array element first. As a result, it forces the entire structure array to be pre-allocated after the first iteration of the loop.

サインインしてコメントする。

### カテゴリ

Find more on Loops and Conditional Statements in Help Center and File Exchange

R2021b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!