2017-01-13 3 views
0

나는 구조의 반복에 대해 학습하고,이 patient.(fields{i}) 동안 루프이 '새 이름'과 '[]'는 어디에서 왔습니까?

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 

에 출력 것들을 시도하고, 내 struct의 일부가 아닌 'New Name'[]을 제공합니다. 그 가치는 어디서 오는거야? 당신은 이전에 patient(3).name = 'New Name'를 할당해야합니다

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

테스트 중에'patient (3) .name = 'New Name' '을 추가하지 않았습니까? 새로운 데이터를 할당하기 전에 '환자를 깨끗하게'제거하십시오. – Suever

+0

안녕하세요, 아뇨, 그게 제가 질문에 얻은 ​​전부입니다. –

+0

'clear patient'를 실행하고 코드를 다시 실행하면 아무런 문제가 없음을 보장합니다. – Suever

답변

2

및 코드 이후에만 세 번째 요소는 그대로 유지하기 때문에 당신의 루프 동안 나타나고있다, patient의 제 1 및 제 2 요소를 덮어 씁니다

출력이다.

당신은이를 방지하기 위해 size 또는

numel(patient) 
% 3 

numel를 사용하여이를 확인할 수 있습니다, 당신은 당신의 structstruct 이전 할당에

% Initialize it 
patient = struct() 

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

또는 명시 적으로 변수 clear patient을 취소 초기화 할 수 있습니다 이것이 일어나지 않도록하십시오. 또한

clear patient 

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

, 다른 필드는 기존 struct 배열에 새 필드를 추가하는 경우, 그 배열의 모든 struct 항목이 값으로 []을받을 수 있기 때문에 []이 있다는 측면 노트, 이유 등 새 필드에 대해서

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 
% []