Copy fields from object cell array into struct array

Hi everyone,
I have a cell array of cfit objects, let's call it objArray. I want to copy several fields (or I guess I should call them attributes) from this objArray to build a struct array. I know I can do it the following way :
mystruct = cellfun(@(x) struct('field1',x.field1,'field2',x.field2), objArray,'UniformOutput',true);
However I would like a way of doing this with a function that takes as input objArray as well as a cell array containing the names of the fields I am willing to copy. It would look like this :
mystruct = obj2struct(objArray,fieldNames);
Any help is welcome :) thanks

 Accepted Answer

Matt J
Matt J on 13 Oct 2020
Edited: Matt J on 13 Oct 2020
I would just keep it simple and use a for-loop. There will be no performance gains from doing it some other way. Any abbreviation of this using cellfun or arrayfun will be syntactic sugar at best.
function mystruct = obj2struct(objArray,fieldNames)
M=numel(objArray);
N=numel(fieldNames);
for m=M:-1:1
for n=1:N
field=fieldNames{n};
mystruct(m).(field)=objArray{m}.(field);
end
end
end

3 Comments

thanks for your help, indeed this seems to be the best solution
I just noticed that your outer for loop loops from the end of the obj array to the start, any particular reason for this?
It avoids mystruct growing in length throughout the loop, which is inefficient. With a descending loop, the whole mystruct array will be allocated once the first outer iteration completes.

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2017b

Asked:

on 13 Oct 2020

Commented:

on 14 Oct 2020

Community Treasure Hunt

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

Start Hunting!