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

28 次查看(过去 30 天)
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 个评论
jonas
jonas 2018-9-15
编辑:jonas 2018-9-15
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

请先登录,再进行评论。

采纳的回答

Image Analyst
Image Analyst 2018-9-15
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)

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Structures 的更多信息

产品


版本

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by