Assignment between structures with common fields
Mostrar comentarios más antiguos
Hi,
I have two structures A and B:
A = struct ('field1', {1,2}, 'field2', {3,4}, 'field3', {5,6});
B = struct ('field1', {7,8}, 'field2', {9,10});
Therefore A and B are:
A =
1x2 struct array with fields:
field1
field2
field3
B =
1x2 struct array with fields:
field1
field2
I want to assign the values of field1 and field2 from B to corresponding field1 and field2 of A. Structure arrays A and B have the same number of elements.
Is there any way for me to do this with the most efficiency?
Thanks
Respuestas (2)
Sara
el 27 de Jun. de 2014
If you do not want to assign all the fields of A to B, I'd do:
f = {'field1','field2'}; % list of fields
for i = 1:numel(f)
B.(f{i}) = A.(f{i});
end
3 comentarios
Enhancing a bit Sara's example, you can get dynamically the list of common fields:
A=struct('p1',[],'p2',[]);
B=struct('p1',[],'p2',[],'p3',[]);
AF=fieldnames(A);
BF=fieldnames(B);
f=intersect(AF,BF);
and the you can go on with Sara's example.
Image Analyst
el 28 de Jun. de 2014
Yeah, you'd think. You'd even think the simpler
A.field1 = B.field1
A.field2 = B.field2
would work, but none of them do. Just try it and see.
Akshay
el 28 de Jun. de 2014
Image Analyst
el 28 de Jun. de 2014
Try it this way:
A = struct ('field1', {1,2}, 'field2', {3,4}, 'field3', {5,6})
B = struct ('field1', {7,8}, 'field2', {9,10})
numberOfStructuresA = length(A)
numberOfStructuresB = length(B)
if numberOfStructuresA ~= numberOfStructuresB
message = sprintf('You cannot assign all of the fields because the number of elements is different');
uiwait(warndlg(message));
return;
end
for k = 1 : numberOfStructuresA
A(k).field1 = B(k).field1
A(k).field2 = B(k).field2
end
Categorías
Más información sobre Structures en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!