How to concatenate structs with different fieldnames?

18 views (last 30 days)
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."

Accepted Answer

Stephen23
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 = []

More Answers (1)

Matt J
Matt J on 11 Dec 2018
Edited: Matt J on 11 Dec 2018
[Object(1:2).Stats]=deal( struct('Var1', [], 'Var2', [])); %first, do this
Object(1).Stats.Var1 = 1;
Object(1).Stats.Var2 = 2;
Object(2).Stats.Var1 = 1;
Output=[Object.Stats]
  1 Comment
JBl147
JBl147 on 12 Dec 2018
Thanks, this works. Unfortunately, it does not fully solve my issue as I do not know the names of the variables and in which struct they are, so I can’t initialize using your first line.
Can you also solve it in this case?

Sign in to comment.

Categories

Find more on Structures in Help Center and File Exchange

Products


Release

R2015b

Community Treasure Hunt

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

Start Hunting!