What are some efficient ways to combine two structures in MATLAB?
field, matlab, merge, structure
Solution
Without collisions, you can do
M = [fieldnames(A)' fieldnames(B)'; struct2cell(A)' struct2cell(B)'];
C=struct(M{:});
And this is reasonably efficient. However, `struct` errors on duplicate fieldnames, and pre-checking for them using `unique` kills performance to the point that a loop is better. But here's what it would look like:
M = [fieldnames(A)' fieldnames(B)'; struct2cell(A)' struct2cell(B)'];
[tmp, rows] = unique(M(1,:), 'last');
M=M(:, rows);
C=struct(M{:});
You might be able to make a hybrid solution by assuming no conflicts and using a try/catch around the call to `struct` to gracefully degrade to the conflict handling case.
Problem
I want to combine two structures with differing fields names. For example, starting with: ``` A.field1 = 1; A.field2 = 'a'; B.field3 = 2; B.field4 = 'b'; ``` I would like to have: ``` C.field1 = 1; C.field2 = 'a'; C.field3 = 2; C.field4 = 'b'; ``` Is there a more efficient way than using "fieldnames" and a for loop? EDIT: Let's assume that in the case of field name conflicts we give preference to `A`.