这些“新名称”和“[]”来自哪里?

时间:2017-01-13 20:19:09

标签: matlab matlab-struct

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

patient.(fields{i})

在此'New Name'期间,它会提供不属于我[]的{​​{1}}和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 = []

1 个答案:

答案 0 :(得分: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
%   []