Dynamic call to structure elements

30 views (last 30 days)
I intend to use a for loop to process iterative computation on different elements of a structure; my structure is made of:
  • MyStruct.Elmt1
  • MyStruct.Elmt2
  • MyStruct.Elmt3
  • ...
How can I dynamicaly call each element of my structure (incrementing the number : Elmt1, Elmt2,...) in order to use it in a for loop?
  1 Comment
Stephen23 on 8 Jul 2020
Edited: Stephen23 on 8 Jul 2020
Those are not elements of a structure, those are fields of a structure.
Your example structure has only has one element (because it is scalar) and has multiple fields.
A non-scalar structure has multiple elements, totally independent of how many fields it has.
I recommend revising the basic concepts: https://www.mathworks.com/help/matlab/structures.html

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 8 Jul 2020
for K = 1 : 3
MyStruct.(sprintf('Elmt%d', K))
for K = 1 : 3
MyStruct.("Elmt"+K) %rely on string objects

More Answers (1)

Stephen23 on 8 Jul 2020
You can trivially access the fields of a structure using this syntax, where F is the fieldname:
You could use sprintf to generate the fieldnames, e,g.:
idx = 1;
fnm = sprintf('Elmt%u',idx);
Note that your code would be simpler and more efficient if you used a non-scalar structure, e.g.:
S(1).Elmt = 1;
S(2).Emlt = 22;
S(3).Emlt = 333;
then you can trivially access any element of that structure array using basic, efficeint indexing:
idx = 1;


Find more on Structures in Help Center and File Exchange




Community Treasure Hunt

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

Start Hunting!