为了简单起见,让我们坚持this official Matlab example。
我运行以下代码,并创建了一个包含三个字段的结构。
patient.name = 'John Doe';
patient.billing = 127.00;
patient.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];
此时我有一个由this picture清楚表示的结构数组:
问题在于:如何清空结构patient(2)
的所有字段?
理想情况下(原谅滥用符号)我想做patient(2).* = {}
之类的事情。
逐个调用字段不是一个选项,因为在我的实际代码中我有很多字段,我都不能将结构转换为单元格。
提前致谢!
答案 0 :(得分:3)
如果经常进行此操作,最好准备EMPTY_PATIENT
:
EMPTY_PATIENT = struct( ...
'name', {}, ...
'billing', {}, ...
'test', {} ...
);
然后使用简单的赋值(非常快)来清空位置:
patient(2) = EMPTY_PATIENT;
答案 1 :(得分:1)
我确定在没有循环的情况下这是一个聪明的方法,但这很好。
fieldstoclear = fieldnames(patient(2));
for ii = 1:length(fieldstoclear)
patient(2).(fieldstoclear{ii}) = [];
end
编辑:忘了structfun
:
patient(2) = structfun(@(x) [], patient(2), 'UniformOutput',false)
注意:这两种方法都不会保留嵌套结构。
答案 2 :(得分:0)
patient(2) = [];
你可能正在寻找什么。这将从结构中消除该元素。
答案 3 :(得分:0)
这应该是任意数量字段的通用解决方案。
fields=fieldnames(patient);
patient(2)=cell2struct(cell(length(fields), 1), fields);