の各要素にフィールドxの文字列のみが含まれているfruit場合は、次の方法で簡単に行うことができます。
toremove = ismember({x.fruit}, 'apple')
x(toremove) = [];
またはもっと簡単に
x = x(~ismember({x.fruit}, 'apple'));
この{x.fruit}構文は、fruitfor eachのすべての値をstructセル配列に結合します。次に、文字列のセル配列で を使用ismemberして、それぞれを と比較でき'apple'ます。xこれにより、へのインデックス付けに使用できるのサイズの論理配列が生成されxます。
strcmp上記の代わりに次のようなものを使用することもできますismember。
x = x(~strcmp({x.fruit}, 'apple'));
アップデート
それぞれx(k).fruitに cell 配列が含まれている場合は、上記のアプローチと同様のアプローチを と組み合わせて使用できますcellfun。
x(1).fruit = {'apple', 'orange'};
x(2).fruit = {'banana'};
x(3).fruit = {'grape', 'orange'};
x = x(~cellfun(@(fruits)ismember('apple', fruits), {x.fruit}));
%// 1 x 2 struct array with fields:
%// fruit
複数の種類の果物を一度に削除することを確認したい場合は、次のようにすることができます。
%// Remove if EITHER 'apple' or 'banana'
tocheck = {'apple', 'banana'};
x = x(~cellfun(@(fruits)any(ismember({'apple', 'banana'}, fruits)), {x.fruit}));
%// Remove if BOTH 'apple' and 'banana' in one
x = x(~cellfun(@(fruits)all(ismember({'apple', 'banana'}, fruits)), {x.fruit}));