How to copy field contents of one struct to another?

167 vues (au cours des 30 derniers jours)
Ralf
Ralf le 13 Juil 2015
Modifié(e) : Stephen23 le 26 Nov 2024
Hi all,
I have got two structs, A and B. B has a subset of the fields of A:
A.f1 = 1;
A.f2 = 2;
A.f3 = 3;
B.f1 = 4;
B.f2 = 5;
Now I want to copy all field content of B to the corresponding fields of struct A, leaving the other fields of A unchanged:
A.f1 = B.f1;
A.f2 = B.f2;
% A.f3 == 3 untouched
Is there a simply way to achieve this for arbitraty structs A and B, considering that B's field names are always a subset of A's field names?
Thank you very much, Ralf

Réponse acceptée

Guillaume
Guillaume le 13 Juil 2015
Modifié(e) : Guillaume le 13 Juil 2015
Iterate over the fieldnames of B to copy them using dynamic field names:
A = struct('f1', 1, 'f2', 2, 'f3', 3);
B = struct('f1', 4, 'f2', 5);
for fn = fieldnames(B)'
A.(fn{1}) = B.(fn{1});
end
  2 commentaires
Chris
Chris le 26 Nov 2024
B.(fn{1})
returns the first value. If you have more than one value or data type (e.g., table) in the field, put this term in curly brackets { }:
A = struct('f1', 1, 'f2', 2, 'f3', 3);
B = struct('f1', 4, 'f2', 5);
for fn = fieldnames(B)'
A.(fn{1}) = {B.(fn{1})};
end
Stephen23
Stephen23 le 26 Nov 2024
Modifié(e) : Stephen23 le 26 Nov 2024
"If you have more than one value or data type (e.g., table) in the field, put this term in curly brackets { }:"
How many values there are in one field is irrelevant. It actually depends on how many elements B has:
Depending on the data types and array sizes the functions HORZCAT, VERTCAT etc may also be useful.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by