How to add (combine) together two structures with the same fields?

277 views (last 30 days)
Dear All,
I have two structures A and B with the same fields. How can I combine them together to form a new structure?
For example, A = struct('field1', array1, 'field2', array2); B = struct('field1', array3, 'field2', array4). A and B have the same fields 'field1' and 'field2'. I want to combine A and B together to obtain structure C = struct('field1', [array1; array3], 'field2', [array2; array4]). array1 and array3 have the same number of columns, and array2 and array4 have the same number of columns.
Thanks.
Benson
  2 Comments
Geoff Hayes
Geoff Hayes on 11 Jun 2021
Benson - what should the new structure look like? If A and B have the same fields, then does that mean that the combined A and B have array fields? Please illustrate with a small example.

Sign in to comment.

Accepted Answer

KSSV
KSSV on 11 Jun 2021
clc; clear ;
s1.name = 'Tom' ;
s1.sex = 'm';
s1.age = 25 ;
s2.name = 'Harry' ;
s2.sex = 'f';
s2.age = 26 ;
% Structure array
s = [s1 ; s2]
% Single structure
S = struct ;
aField = fields(s1);
for i = 1:3
S.(aField{i}) = {s1.(aField{i}) s2.(aField{i})} ;
end
S
  4 Comments
Stephen23
Stephen23 on 11 Jun 2021
Note that the loop does not concatenate the field data as your qustion shows, but instead nests the field data within a 1x2 cell array.
dleal
dleal on 20 Apr 2022
Edited: dleal on 20 Apr 2022
Hi, I have a similar question..
given two structs with numerical values:
S1 = struct; S2 = struct;
S1.A = [1,2]; S1.B = [3, 4];
S2.A = [9,10]; S2.B = [11,12];
is there a way to combine them into S3 so that S3.A = [1,2,9,10] and S3.B = [3,4,11,12]?
I would just do it with a for loop, but I wonder if there is a way that might be less expensive:
S3.A = [];
S3.B = [];
fNames = fieldnames(S1);
for jj = 1:numel(fNames)
S3.(fNames(jj) = [S1.(fNames(jj)) , S2.(fNames(jj)) ];
end

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!