How to concatenate structs with different fieldnames?
18 views (last 30 days)
Show older comments
I'm looking for a way to concatenate structures which have different fieldnames into one struct array of with similar fieldnames.
Below you will find a minimum working example:
% Convert this
Object(1).Stats.Var1 = 1;
Object(1).Stats.Var2 = 2;
Object(2).Stats.Var1 = 1;
% Towards this
Output = [struct('Var1', 1, 'Var2', 2);
struct('Var1', 1, 'Var2', [])];
% But this doesn't work
[Object.Stats]
This returns an error message "Number of fields in structure arrays being concatenated do not match. Concatenation of structure arrays requires that these arrays have the same set of fields."
0 Comments
Accepted Answer
Stephen23
on 12 Dec 2018
Edited: Stephen23
on 12 Dec 2018
Just use some loops (this will be quite efficient):
A(1).Stats.Var1 = 1;
A(1).Stats.Var2 = 2;
A(2).Stats.Var1 = 3;
Z = repmat(struct(),size(A));
for ii = 1:numel(A)
S = A(ii).Stats;
F = fieldnames(S);
for jj = 1:numel(F)
Z(ii).(F{jj}) = S.(F{jj});
end
end
And checking:
>> Z(1).Var1
ans = 1
>> Z(1).Var2
ans = 2
>> Z(2).Var1
ans = 3
>> Z(2).Var2
ans = []
See Also
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!