2016-08-03 62 views
1

Ich habe eine Struktur-Array:Swapping Werte von Feldern in einer Struktur Array

s(1)=struct('field1', value, 'field2', value, 'field3', value) 
s(2)=struct('field1', value, 'field2', value, 'field3', value) 

und so weiter

Wie tauschen wir alle Werte von field1 mit allen Werten von field2?

Ich habe diesen Code versucht

a=[s.field1]; 
[s.field1]=s.field2; 
[s.field2]=a; 

Und während ich die field2 Werte in field1 bekommen kann, kann ich nicht die field1 Werte in die field2 bekommen.

+0

Kennzeichnen Sie Ihre Fragen immer mit einer Sprache. –

+0

@JohnnyMopp Entschuldigung, vergessen! Danke für die Erinnerung –

+2

Bitte entstellen Sie Ihre Frage nicht. – JAL

Antwort

2

Sie sind ziemlich mit Ihrem Ansatz da. Die einfachste fix wäre a als Zellenfeld zu speichern, anstatt ein numerisches Array, um die Vorteile von MATLAB Liste Expansion zu nehmen:

s(1)=struct('field1', 11, 'field2', 12, 'field3', 13); 
s(2)=struct('field1', 21, 'field2', 22, 'field3', 23); 

a = {s.field1}; 
[s.field1] = s.field2; 
[s.field2] = a{:}; 

Wo [s.field1; s.field2] geht aus:

ans = 

    11 21 
    12 22 

An:

ans = 

    12 22 
    11 21 

Für einen allgemeineren Ansatz, könnten Sie ut ilize struct2cell und cell2struct, um die Felder zu tauschen:

function s = testcode 
s(1)=struct('field1', 11, 'field2', 12, 'field3', 13); 
s(2)=struct('field1', 21, 'field2', 22, 'field3', 23); 

s = swapfields(s, 'field1', 'field2'); 
end 

function output = swapfields(s, a, b) 
d = struct2cell(s); 
n = fieldnames(s); 

% Use logical indexing to rename the 'a' field to 'b' and vice-versa 
maska = strcmp(n, a); 
maskb = strcmp(n, b); 
n(maska) = {b}; 
n(maskb) = {a}; 

% Rebuild our data structure with the new fieldnames 
% orderfields sorts the fields in dictionary order, optional step 
output = orderfields(cell2struct(d, n)); 
end 

die das gleiche Ergebnis liefert.