在Matlab中清空结构数组的所有字段

时间:2014-07-18 15:21:34

标签: arrays matlab

为了简单起见,让我们坚持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清楚表示的结构数组: enter image description here

问题在于:如何清空结构patient(2)的所有字段?

理想情况下(原谅滥用符号)我想做patient(2).* = {}之类的事情。

逐个调用字段不是一个选项,因为在我的实际代码中我有很多字段,我都不能将结构转换为单元格。

提前致谢!

4 个答案:

答案 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);