MATLAB Answers

Have class vector; how obtain vector of a field?

1 view (last 30 days)
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 Comments

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 1 Apr 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 Comment

David W Purcell
David W Purcell on 1 Apr 2020
Thank you for your help. That is much better!!!!

Sign in to comment.

More Answers (0)

Sign in to answer this question.


Translated by