- If you want to loop over the elements of a structure then use its size/numel.
- If you want to loop over the fields of a structure then use its fieldnames.
[SOLVED ALREADY] Loop through data struct with variable names
14 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Sokratis Panagiotidis
am 14 Jul. 2022
Kommentiert: Voss
am 14 Jul. 2022
EDIT:
Hi, So it seems like I was able to solve it already so yeah, Imma post the solution as an answer for people to look into it in case they have a similar problem.
Hi,
I am trying to loop through a structure called 'Erruptions'.
Now in this structure I have 3 more sub structs, thus it's length is 3.
The 3 structures have variable names 'E1', 'E2', etc. These are simply 1x2 doubles or vectors if you wanna call them that.
So by calling one of the structs I write
Erruptions.sub_struct
and I get its content
E1: [6.0014 1.0161]
E2: [4.5936 0.5191]
E3: [3.2693 0.2849]
E4: [2.7640 -0.0073]
E5: [2.3443 0.1345]
But when I want to get the number of elements it says it's only 1, doesn't matter if I use
length(Erruptions.sub_struct) % gives me ans = 1
or
size(Erruptions.sub_struct) % gives me ans = [1 1]
which is very confusing. I want to run a loop through every substruct but since it only recognizes them as one single element, opposed to the above shown 5, itleave the substruct after taking the first into consideration.
How can I solve this problem?
3 Kommentare
Steven Lord
am 14 Jul. 2022
One analogy or mental model I think helps is that of a bookshelf. One bookshelf (struct) may have many shelves (fields) and each shelf may contain just one item or a series of items (data in the field.)
Akzeptierte Antwort
Voss
am 14 Jul. 2022
Bearbeitet: Voss
am 14 Jul. 2022
% creating a structure like yours
Erruptions = struct('sub_struct',struct( ...
'E1',[6.0014 1.0161], ...
'E2',[4.5936 0.5191], ...
'E3',[3.2693 0.2849], ...
'E4',[2.7640 -0.0073], ...
'E5',[2.3443 0.1345]))
% Erruptions.sub_struct is a scalar structure, so its length is 1
Erruptions.sub_struct
% you want to get the fields of Erruptions.sub_struct
fn = fieldnames(Erruptions.sub_struct)
% and loop through those
for ii = 1:numel(fn)
Erruptions.sub_struct.(fn{ii})
end
2 Kommentare
Weitere Antworten (2)
Benjamin Thompson
am 14 Jul. 2022
You want to index into the structure array, then pass one of those array elements to the length function:
>> S1.E1 = [1 1];
>> S2.E1 = [1 1];
>> SArray(1) = S1
SArray =
struct with fields:
E1: [1 1]
>> SArray(2) = S2
SArray =
1×2 struct array with fields:
E1
>> length(SArray.E1)
Error using length
Too many input arguments.
>> length(SArray(1).E1)
ans =
2
1 Kommentar
Stephen23
am 14 Jul. 2022
A much simpler way to create that structure:
S(1).E1 = [1,1];
S(2).E1 = [0,1];
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!