Borrar filtros
Borrar filtros

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

21 visualizaciones (últimos 30 días)
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 comentario
jonas
jonas el 15 de Sept. de 2018
Editada: jonas el 15 de Sept. de 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

Iniciar sesión para comentar.

Respuesta aceptada

Image Analyst
Image Analyst el 15 de Sept. de 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)

Más respuestas (0)

Categorías

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

Etiquetas

Productos


Versión

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by