Accessing all fields within a struct level at once
35 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Vaishnavi
el 19 de Dic. de 2023
If I have a struct A which looks like:
A.('one').('include') ; A.('two').('include'); A.('three').('dont include');
and so on, how can I directly check if 'dont include' is present in the third level of the structure without having to use a loop. Is this possible to achieve without implementing a loop?
2 comentarios
Voss
el 19 de Dic. de 2023
'dont include' is not a valid field name, so what does the struct really look like?
Rather than describing the struct, maybe it's better to save it in a .mat-file and upload it here (using the paperclip button).
Respuesta aceptada
Stephen23
el 19 de Dic. de 2023
Editada: Stephen23
el 19 de Dic. de 2023
"Is this possible to achieve without implementing a loop?"
Not really, but you can hide the loop using STRUCTFUN:
A.one.include = 1;
A.two.include = 2;
A.three.dontinclude = 3;
F = @(s)isfield(s,'dontinclude');
structfun(F,A)
2 comentarios
Más respuestas (1)
Nipun
el 21 de Dic. de 2023
Editada: Nipun
el 21 de Dic. de 2023
Hi Vaishnavi,
I understand that you are trying to find if "dontinclude" is a structure property without using for loops.
One possible solution is to create a function which evaluates every level of structure to check if the property is present.
Here is an example code with the listed recommendation
funcCheck = @(struct)isfield(struct,'dontinclude');
structfun(funcCheck,A)
Returns a "n x 1" logical array, where "n" is the number of levels in the structure.
Link to documentation:
Hope this helps.
Regards,
Nipun
0 comentarios
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!