# Acces data in nested structure

18 views (last 30 days)
Rob Weh on 4 Jun 2019
Hi everyone,
I have a structure like this:
S.various_substructures.value1.x and S.various_substructures.value1.y
various_substructures are structures of varying fieldnames while the following substructures have the same names. The last structure contains arrays x and y.
I tried it with arrayfun without succes. Any idea to acces the data without a loop?
TIA, Rob
Bjorn Gustavsson on 4 Jun 2019
@Jan: ...and we all have memories of thinking: "if - if only..."

Stephen23 on 4 Jun 2019
Edited: Stephen23 on 4 Jun 2019
"Any idea to acces the data without a loop?"
Not really.
You can either use an explicit for loop or an implicit loop using arrayfun or structfun:
>> S.A.value1.x = 1;
>> S.A.value1.y = 11;
>> S.B.value1.x = 2;
>> S.B.value1.y = 22;
>> S.C.value1.x = 3;
>> S.C.value1.y = 33;
>> X = structfun(@(s)s.value1.x,S)
X =
1
2
3
>> Y = structfun(@(s)s.value1.y,S)
Y =
11
22
33
Rob Weh on 4 Jun 2019
Damn, was trying structfun before but seems I messed something up... :\ Many thanks Stephen for your fast reply!!!

Sayyed Ahmad on 4 Jun 2019
if your various_substructures is an array you can access the value like follow:
for i=1:5
s.var(i).val1.x=i;
s.var(i).val1.y=i^2;
end
x=s.var(3).val1.x;
y=s.var(3).val1.y;

Raghunandan V on 4 Jun 2019
Hi,
You can treat the variable name as string.
• First you should store all the various_subStructures in an array(or cell) in form of string.
• Make a loop and get the name of the variables that you want in string format.
• Then convert the name in the form of string to variable name using commands like genvarname and eval like this
Regards,
Raghunandan V
##### 2 CommentsShowHide 1 older comment
Raghunandan V on 4 Jun 2019
Thanks, I didn't know this

R2019a

### Community Treasure Hunt

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

Start Hunting!

Translated by