2017-01-13 6 views
0

私は構造の反復について学び、そしてこのpatient.(fields{i})の間にループこれらの `New Name`と` [] 'はどこから来ていますか?

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'[]を与えます。これらの値はどこから来ていますか?

出力は次のとおりです。

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(3).name = 'New Name'を割り当てられ、あなたのコード以来patientの第一及び第二の要素を書き込みの上に専用している必要があり、第三の要素はそのまま残っているので、あなたのループ中に表示されています。あなたはこれを防ぐためにsizeまたはnumel

numel(patient) 
% 3 

を使用してこれを確認することができます

、あなたは前に割り当て

% Initialize it 
patient = struct() 

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

または明示的に変数をクリアするには、空のstructにごstructを初期化するかclear patientこれが起こらないようにします。

既存 struct配列に新しいフィールドを追加する場合は、アレイ内のすべてのエントリが struct値として []を受け取ることになりますので、サイドノートとして、他のフィールドは []であることを理由がある。また
clear patient 

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

、新しいフィールドのため

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 
% [] 
関連する問題