how to implement structfun using 2 variables

5 visualizaciones (últimos 30 días)
Raghunandan V
Raghunandan V el 4 de Jun. de 2019
Comentada: Stephen23 el 4 de Jun. de 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

Respuesta aceptada

Guillaume
Guillaume el 4 de Jun. de 2019
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.

Más respuestas (1)

Jan
Jan el 4 de Jun. de 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.

Categorías

Más información sobre Structures en Help Center y File Exchange.

Productos


Versión

R2014b

Community Treasure Hunt

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

Start Hunting!

Translated by