Access Sub-fields of multiple different-named fields in struct

25 visualizaciones (últimos 30 días)
Nathan Moorman
Nathan Moorman el 30 de Sept. de 2022
Respondida: Walter Roberson el 30 de Sept. de 2022
I am trying to find an efficient way to grab data from lower-level fields of a struct. The top-level struct, s, has fields a, b, c, and each of those has different subfields, but they all share subfield x. Ideally, I would like to have a single line that would let me get a vector or cell of those values, something like:
>> out = s.([a,b,c]).x;
>> out = {'str1', 'str2', 'str3'}
So far, the best way I have come up with is:
out = cell(1,3);
f = fieldnames(s);
for i = 1:3
out{i} = s.(f{i}).x;
end
But it seems like there should be a better, ideally loop-free, way to do this. Any ideas?

Respuestas (2)

Walter Roberson
Walter Roberson el 30 de Sept. de 2022
struct2cell(structfun(@(F)F.x, s, 'UniformOutput', 0))

Cel Kulasekaran
Cel Kulasekaran el 30 de Sept. de 2022
If you want to access a dynamic structure, s, it must evaluate to a single valid field name. I don't think there is much penalty in the loop here, do you have control of the construction of s? Perhaps re-consider that datastructure.

Categorías

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

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by