Reputation: 1110
I would like to know the easiest way to update a Matlab structure from another structure with different fields. Please see my example to understand what I mean. I have two structures S1 and S2 with different fieldnames which I want to combine.
S1.a = 1;
S1.b = 2;
S2.c = 3;
S2.d = 4;
If I write S1 = S2;
the S1 structure will obviously be overwritten by S2. I want the result to be as the following code :
S1.a = 1;
S1.b = 2;
S1.c = 3;
S1.d = 4;
Is there an easy way to do so. I manage to do it by using a for loop and the fieldnames()
function in order to get the fieldname from S2 and put it in S1 but it is not really a neat solution.
Upvotes: 6
Views: 924
Reputation: 25232
I doubt there is real vectorized way. If you really need that last little tiny bit of speed, don't use structs.
Here is the loop solution:
fn = fieldnames(S2)
for ii = 1:numel(fn), S1.(fn{ii}) = S2.(fn{ii}); end
The reason why there is no trivial solution, is that Matlab can't know in advance that there is no field c
or d
in S1
, and if so, there would be a conflict.
Jolo's answer seems to be vectorized, though I don't know how these functions work internally. And they are probably not much faster than the simple loop.
Upvotes: 3
Reputation: 423
This might help if you know the two structs don't have the same fields
tmp = [fieldnames(S1), struct2cell(S1); fieldnames(S2), struct2cell(S2)].';
S1 = struct(tmp{:});
Upvotes: 2