I am building a structure whose fields and subfields are nested structures. I would like to cycle through a subfield, determine if any values have been assigned yet, and if not, assign a value to the end of an array. Here is an example in which I am checking how many potato dishes guests are bringing to a potluck Thanksgiving dinner. Is there a better way to do this? My real dataset has many more fields than this example.
potatoList = {'Yam', 'White', 'Candied'};for iPerson = 1:4 % cycle through guests
for iPotato = 1:length(potatoList) isFirst = false; % Is this the first entry for a given type of potato or not?
if ~exist('Thanksgiving', 'var') % Haven't even created the structure yet
isFirst = true; else % Structure exists, but subfield may not
if ~isfield(Thanksgiving, 'Potato') isFirst = true; else if ~isfield(Thanksgiving.Potato, potatoList{iPotato}) isFirst = true; end end end if isFirst iValue = 1; % The first time, the index starts at one
% Placeholder for nested subfield before value is assigned, to avoid
% error due to field not existing yet
Thanksgiving.Potato.(potatoList{iPotato}).number = []; else % After the first time, the index starts at the end of the array
iValue = length(Thanksgiving.Potato.(potatoList{iPotato}).number) + 1; end % Assign example values to array
Thanksgiving.Potato.(potatoList{iPotato}).number(iValue) = ... round(rand(1)*10); % Number of potato dishes someone is bringing
endend
Best Answer