Effacer les filtres
Effacer les filtres

Copy of one field of a structured array

6 vues (au cours des 30 derniers jours)
John Petersen
John Petersen le 12 Mar 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.

Réponse acceptée

per isakson
per isakson le 12 Mar 2013
Modifié(e) : per isakson le 12 Mar 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 commentaire
John Petersen
John Petersen le 12 Mar 2013
Thanks per! You've made the 1000 milestone.

Connectez-vous pour commenter.

Plus de réponses (2)

the cyclist
the cyclist le 12 Mar 2013
Modifié(e) : the cyclist le 12 Mar 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 commentaires
per isakson
per isakson le 12 Mar 2013
Modifié(e) : per isakson le 12 Mar 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 le 13 Mar 2013
Thanks to the cyclist. This is actually what I was looking for!

Connectez-vous pour commenter.


Azzi Abdelmalek
Azzi Abdelmalek le 12 Mar 2013
C=struct('B',{A.B})

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by