MATLAB Answers

0

how to implement structfun using 2 variables

Asked by Raghunandan V on 4 Jun 2019
Latest activity Commented on by Stephen Cobeldick on 4 Jun 2019
Hi all,
Is it possible to have a code which is similar to
S.value1.x = 1;
S.value2.x = 10;
S.value3.x = 17;
S1.value1.x = 12;
S1.value2.x = 11;
S1.value3.x = 13;
S2.value1.x = 142;
S2.value2.x = 11;
S2.value3.x = 113;
output1 = structfun(@(In, val)In.val.x,S,value1)
output2 = structfun(@(In, val)In.val.x,S1,value1)
Output:
output1 = 1
output2 = 12
Here I need to changing parameter.
Thanks,
Raghunandan V

  1 Comment

Sign in to comment.

Products


Release

R2014b

2 Answers

Answer by Guillaume
on 4 Jun 2019
 Accepted Answer

Not entirely sure what you're asking, structfun applies the same function to each field of a scalar structure. It doesn't look like it's what you're after at all.
If you're asking how to get the value of a particular field having its name stored as text, yes this can be done easily
fname = 'value1';
S.(fname).x
Hopefully, your example is for illustration and you're not using numbered variables and numbered field names. Numbered anything is a flawed design and you should replace that with proper indexing:
S(1).value(1).x = 1
S(1).value(2).x = 10;
S(1).value(3).x = 17;
S(2).value(1).x = 12;
S(2).value(2).x = 11;
S(2).value(3).x = 13;
S(3).value(1).x = 142;
S(3).value(2).x = 11;
S(3).value(3).x = 113;
which completely removes the need to generate field names as strings.

  0 Comments

Sign in to comment.


Answer by Jan
on 4 Jun 2019

This seems to be much easier:
field = 'value1';
output1 = S.(field).x
output1 = S1.(field).x
structfun iterates over the fields of a struct. So it is not clear why you want to use it to get the values of a nested substruct.

  0 Comments

Sign in to comment.