How do I call a struct name from variables stored in a cell array in a loop?

26 views (last 30 days)
Greetings all:
So I have three structs named method1, method2, and method3. I also have a cell array (named structNames) that contains the name of the structs. The problem is that I get an error (that reads "Struct contents reference from a non-struct array object") when I try to extract the content of the structs in a for loop. Is there a way around this: Here is a sample code:
structNames = {method1,method2,method3};
method1.mean = 3;
method2.mean = 4;
method3.mean = 5;
meanSum = 0;
for m = 1:length(structNames)
meanExtract = structNames{m}.mean;
meanSum = meanSum + meanExtract;
end
  1 Comment
jonas
jonas on 15 Sep 2018
Edited: jonas on 15 Sep 2018
You should never name variables nor structs dynamically. As a rule of thumb, never store meta data as part of the variable name if you intend to access it via a loop. What you can do is to name fields dynamically. You could for example store method1-3 in one struct (let's call it data), and access its via dynamic field names:
f1={'m1','m2','m3'}
for i=1:3
data.(f1{i}).mean
end

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 15 Sep 2018
I don't think people would really recommend that approach, but here is one way to solve it using the hated eval() function:
method1.mean = 30;
method2.mean = 40;
method3.mean = 50;
method4.mean = 60;
method5.mean = 70; % Whatever....
structNames = {'method1','method2','method3'}; % List of structs we want to use now.
thisSum = 0;
for m = 1:length(structNames)
commandString = sprintf('%s.mean', structNames{m})
thisMean = eval(commandString)
thisSum = thisSum + thisMean
end
meanSum = thisSum / length(structNames)

More Answers (0)

Categories

Find more on Structures in Help Center and File Exchange

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!