2017-01-13 2 views
0

ich über Struktur Iteration lerne, und in der SchleifeWoher kommen diese `New Name` und` [] `?

patient(1).name = 'John Doe'; 
patient(1).billing = 127.00; 
patient(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205]; 
patient(2).name = 'Ann Lane'; 
patient(2).billing = 28.50; 
patient(2).test = [68, 70, 68; 118, 118, 119; 172, 170, 169]; 

fields = fieldnames(patient) 

%numel is number of elements 
for i=1:numel(fields) 
    fields(i) 
    patient.(fields{i}) 
end 

Während dieser patient.(fields{i}) ausgeben Dinge auszuprobieren, gibt es 'New Name' und [], die nicht Teil meines struct sind. Woher kommen diese Werte?

Die Ausgabe lautet:

ans = 'name' 
ans = John Doe 
ans = Ann Lane 
ans = New Name 
ans = 'billing' 
ans = 127 
ans = 28.5000 
ans = [] 
ans = 'test' 
ans = 79.0000 75.0000 73.0000 
    180.0000 178.0000 177.5000 
    220.0000 210.0000 205.0000 
ans = 68 70 68 
    118 118 119 
    172 170 169 
ans = [] 
+0

Sind Sie sicher, dass Sie während des Tests keinen 'patient (3) .name = 'New Name'' hinzugefügt haben? Versuchen Sie "Patient löschen", um den Patienten vollständig zu entfernen, bevor Sie neue Daten zuweisen. – Suever

+0

Hallo, Nein, das ist alles was ich in der Frage habe. –

+0

Führen Sie "clear patient" aus und führen Sie Ihren Code erneut aus, und ich garantiere, dass Sie keine Probleme haben werden. – Suever

Antwort

2

Sie müssen vorher patient(3).name = 'New Name' und nur überschreibt, da der Code zugewiesen haben die ersten und zweiten Elemente patient, das dritte Element unberührt bleibt und daher wird während Ihres Looping erscheinen.

Sie können dies überprüfen, indem size oder numel

numel(patient) 
% 3 

Verwendung Um dies zu verhindern, können Sie entweder initialisieren Ihre struct auf eine leere struct vor der Zuweisung

% Initialize it 
patient = struct() 

% Now populate 
patient(1).name = 'whatever'; 

oder explizit deaktivieren Sie die Variable clear patient um sicherzustellen, dass dies nicht geschieht.

clear patient 

% Now populate it 
patient(1).name = 'whatever'; 

Auch als Nebennote, der Grund dafür, dass die anderen Felder sind [] da ist, wenn Sie ein neues Feld zu einem bestehenden struct Array hinzufügen, dann werden alle struct Einträge in dem Array [] als Wert erhalten für das neue Feld

clear patient 

patient(2).name = 'New Name'; 
patient(1).name = 'Test'; 

% Add a new field only to patient(2) 
patient(2).date = 'today'; 

% patient(1).date becomes [] 
patient(1).date 
% []