Borrar filtros
Borrar filtros

Copy of one field of a structured array

6 visualizaciones (últimos 30 días)
John Petersen
John Petersen el 12 de Mzo. de 2013
Is there a way to make a copy of one field of a structured array without doing a loop? I have tried but it just results in the first element.
Creation of sample structure
for i=1:5
A(i).A = i;
A(i).B = i+10;
end
>>C = A.B
C =
11
Likewise
>> C = A(1:3).B
C =
11
instead of C(1).B = 11, C(2).B = 12, and C(3).B = 13 like I want.

Respuesta aceptada

per isakson
per isakson el 12 de Mzo. de 2013
Editada: per isakson el 12 de Mzo. de 2013
One way to do it:
>> C = cell2struct( num2cell([A.B]), {'B'} )
C =
5x1 struct array with fields:
B
>> C(1).B
ans =
11
>> C(2).B
ans =
12
another
>> C = struct( 'B', num2cell([A.B]) )
C =
1x5 struct array with fields:
B
>> C(1).B
ans =
11
>> C(2).B
ans =
12
>>
  1 comentario
John Petersen
John Petersen el 12 de Mzo. de 2013
Thanks per! You've made the 1000 milestone.

Iniciar sesión para comentar.

Más respuestas (2)

the cyclist
the cyclist el 12 de Mzo. de 2013
Editada: the cyclist el 12 de Mzo. de 2013
Yet another way:
[C(1:numel(A)).B] = A.B;
Note that this method will not overwrite other fields of C, if they exist. Some of the methods in other answers will, so be cautious!
  2 comentarios
per isakson
per isakson el 12 de Mzo. de 2013
Editada: per isakson el 12 de Mzo. de 2013
The two functions, struct and cell2struct, create a new struct and overwrite an existing C.
I'll try to remember that numel(A) in the rhs-expression creates a new struct if C does not exist. And I'll reread the entry on deal in the documentation.
John Petersen
John Petersen el 13 de Mzo. de 2013
Thanks to the cyclist. This is actually what I was looking for!

Iniciar sesión para comentar.


Azzi Abdelmalek
Azzi Abdelmalek el 12 de Mzo. de 2013
C=struct('B',{A.B})

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by