Have class vector; how obtain vector of a field?
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
David W Purcell
il 1 Apr 2020
Commentato: David W Purcell
il 1 Apr 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
0 Commenti
Risposta accettata
Guillaume
il 1 Apr 2020
ages = [meep.age]; %same as: ages = horzcat(meep.age);
%or
ages = vertcat(meep.age); %to vertically concatenate all the values
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
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Get Started with MATLAB in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!