I like to return mutltiple outputs from a function as a struct. Many times I call the function in a loop and I want to gather the results for all iterations as a struct array. Then I can, for example, access all individual fields using a bracket.
My question is how to add the return-structs to the struct array so each member of the array has the return-struct fields.
This does not work:
>> sarry = struct([]);>> sarry(end+1) = myfunc(foo);??? Subscripted assignment between dissimilar structures.
I wrote a function that does what I want–see below.
Is there an easier way to do it?
Bob
p.s. here is my function:
function sarray = AddStruct2StructArray(sarray,s)fnames = fieldnames(s);sarray(end+1).(fnames{1}) = s.(fnames{1});if length(fnames) > 1 for k = 2:length(fnames) sarray(end).(fnames{k}) = s.(fnames{k}); endend
p.p.s. I ran across this idea but it assumes that the inputs to the function in different iterations of the loop are the integers. It could be extended but does not allow other code within the loop.
T = arrayfun(@(K) CreateAsStruct(K), 1:n, 'UniformOutput',0);array = horzcat(T{:});clear T
Best Answer