Have class vector; how obtain vector of a field?

5 vues (au cours des 30 derniers jours)
David W Purcell
David W Purcell le 1 Avr 2020
Hello,
I have a vector (1D array) of a class that has several fields.
When working with my class, I would like to sometimes obtain a simple vector of a specific field, but I have only been able to do that with a for loop. There must be a better way!
For example, I have a class to represent a person called meep. A field within meep is age.
If I have vector containing 1000 meep, I might like to extract a numeric vector containing just the ages.
I thought something like
ages=meep(:).age;
might do the trick, but it just gives the age of the last element of the meep vector. I've resorted to this static helper function within my class:
function param=paramVec( mVec, field )
n=length(mVec); %number of meeps; object mVec is expected to be a vector
param=-99*ones(n,1); %one spot per meep
for i=1:n %go through meep vector
param(i)=mVec(i).(field);
end
end %end of return vector of requested parameters static function
Can someone suggest a more sensible and faster running approach?
Thank you, David

Réponse acceptée

Guillaume
Guillaume le 1 Avr 2020
ages = [meep.age]; %same as: ages = horzcat(meep.age);
%or
ages = vertcat(meep.age); %to vertically concatenate all the values
See the documentation on comma separated lists for details of how this work.
If for some reason, the fields/properties cannot be concatenated (because they don't have a common size in at least one dimension), then:
ages = {meep.age}; %to store them as a cell array
  1 commentaire
David W Purcell
David W Purcell le 1 Avr 2020
Thank you for your help. That is much better!!!!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Construct and Work with Object Arrays dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by