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

 Respuesta aceptada

Matt J
Matt J el 13 de Oct. de 2020
Editada: Matt J el 13 de Oct. de 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 comentarios

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?
Matt J
Matt J el 14 de Oct. de 2020
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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2017b

Preguntada:

el 13 de Oct. de 2020

Comentada:

el 14 de Oct. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by