0

我正在学习结构迭代,并尝试在循环中输出内容

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

在此期间patient.(fields{i}),它给了'New Name'哪些[]不属于我的struct。这些价值观从何而来?

输出是:

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 = []
4

1 回答 1

2

您必须先前已分配patient(3).name = 'New Name',并且由于您的代码仅覆盖 的第一个和第二个元素patient,因此第三个元素保持不变,因此在循环期间出现。

您可以通过使用sizenumel

numel(patient) 
%   3

为了防止这种情况,您可以在分配之前将您的初始化struct为空struct

% 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
%   []
于 2017-01-13T20:27:26.097 回答