matlab 移除所有具有特定索引的字段

egdjgwm8  于 2022-12-27  发布在  Matlab
关注(0)|答案(2)|浏览(243)

我得到了一个只有几个字段的结构体,我们称之为“ST”。我删除了所有flag=0的行。我做的很简单:

ST.Name(flag==0)=[];
ST.Age(flag==0)=[];
ST.Sex(flag==0)=[];
ST.School(flag==0)=[];
%...
% ...
ST.Nationality(flag==0)=[];

它的工作,但我想一些更聪明的方式,因为我会有许多行,并可能忘记一些东西。所以我累了工作更聪明:

fn = fieldnames(ST);
ST.fn(flag==0)=[];

我得到一个错误:删除需要一个已经存在的变量。正确的编写方法是什么?

fjnneemd

fjnneemd1#

% Find the indices of the elements with flag==0
indices = find(flag==0);

% Loop through each field of the struct
fn = fieldnames(ST);
for i = 1:numel(fn)
    % Delete the elements at the indices from the current field
    ST.(fn{i})(indices) = [];
end
hfwmuf9z

hfwmuf9z2#

一种简单的方法是使用structfun

ST.Age = [10 20 30 40];
ST.Sex = {'male' 'female' 'male' 'female'};
flag = [0 0 1 1];

然后

ST = structfun(@(field) field(flag~=0), ST, 'UniformOutput', false);

给予

ST = 
  struct with fields:

    Age: [30 40]
    Sex: {'male'  'female'}

相关问题