Retrieve data from a nested structure

42 visualizaciones (últimos 30 días)
matheu Broom
matheu Broom el 19 de Feb. de 2018
Comentada: Walter Roberson el 8 de Dic. de 2021
Hi,
I am looking for some help with extracting data from a nested structure. I have a structure like that shown below.
I can call a single value from the structure easily e.g data.prop(1).Area will give me the value of Area from the first prop structure.
I wish to extract easily all of a certain field, the only way I can currently do this is with a loop. For example I might wish to make an array with all of the Areas.
myData = data.prop(1:3).Area
However this doesn't work.
My current solution is to loop through the structure as follows:
for i = 1:length(data)
myData(i,1) = data.prop(i).Area
end
If there is a better way to achieve this I would be very interested. Thank you for the help

Respuestas (2)

Martin Dale
Martin Dale el 8 de Dic. de 2021
% use a 2 stage process ( or more stages for a deeper nested structure)
tmp = [data.prop];
areas = [tmp.area];

Walter Roberson
Walter Roberson el 19 de Feb. de 2018
myData = [data.prop.Area];
  5 comentarios
matheu Broom
matheu Broom el 19 de Feb. de 2018
AHH, I think this is the issue, each of the prop is a structure holding a field, Area, Perimeter etc which each has one value. The loops are working but I just read about avoiding loops for efficiency and that its a bad coding practice.
I started using structures as its the only way I found of naming columns so that I know what that column contains.
Walter Roberson
Walter Roberson el 8 de Dic. de 2021
N = 10;
data.prop = struct('Area', num2cell(rand(1,N)), 'Perimeter', num2cell(randi(50,1,N)), 'Centre', num2cell(rand(N,2),2).');
data.prop
ans = 1×10 struct array with fields:
Area Perimeter Centre
[data.prop.Area]
ans = 1×10
0.9392 0.1636 0.5417 0.4702 0.3263 0.5196 0.4143 0.4565 0.1550 0.5646
You can see that my data.prop is a non-scalar structure and that it still works.

Iniciar sesión para comentar.

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!

Translated by