特定のフィールドを持つ構造体配列があります。今私は、特定のフィールドが空であるすべての行をフィルタリングしたいと思います。特定のフィールドが空の場合に構造体配列からデータをフィルタリングする方法
基本的に私が今持っているものは次のとおりです。
data(1).elem1 = 1;
data(1).elem2 = 2;
data(1).elem3 = 3;
data(2).elem1 = 4;
data(2).elem3 = 6;
data(3).elem1 = 7;
data(3).elem2 = 8;
data(4).elem1 = 9;
data(4).elem2 = 10;
data(4).elem3 = 11;
data(5).elem1 = 9;
data(5).elem3 = 11;
data
fields = {'elem2,elem3'};
data(any(~cellfun(@(x) any(~isempty(x)), {data.('elem2'); data.('elem3')}))) = [];
これは大丈夫動作します。しかし、具体的には{data.('elem2'); data.('elem3')}
を表現したくありません。単純に変数fields
を使用したいと思います。
フィールドをループして{data.('elem2'); data.('elem3')}
を含む一時変数を作成することができます。しかし、私はこれをしないことを好む。私はもっと巧妙な方法があると思うので、私が現在行っているように、それがより効率的に行えないのだろうかと思います。
「フィールド」の定義に間違いがあります。 'fields = {'elem2'、 'elem3'};'でなければなりません。そして、あなたは 'data(fields {2})})))= [];'(あなたが持っている ' 1つの余分な 'any'と2つの追加否定!) – erfan