0

多数のフィールドを持つ 1x10 の構造体配列があり、フィールド変数の 1 つで特定の値を持つ要素を構造体配列から削除したいと考えています。探している値と探しているフィールドを知っています。また、構造体配列から要素を見つけたら削除する方法も知っています。問題は、強引な解決策、つまり構造体配列の要素を通過して探している値と比較する for ループを経由せずに、それをエレガントに識別する方法 (可能であれば) です。サンプル コード: 次のフィールドを持つ 1x10 構造体配列としての買い手: id,n,Budget および id_test = 12 のような id 値で検索する変数

4

1 に答える 1

2

structs の配列があり、ドット参照を使用すると、カンマ区切りのリストが作成されるという事実を利用できます。これを で囲む[]と配列を作成しようとし、 で囲むと{}セル配列に強制されます。

a(1).value = 1;
a(2).value = 2;
a(3).value = 3;

% Into an array
[a.value]

%   1   2   3

% Into a cell array
{a.value}

%   [1]     [2]     [3]

したがって、比較を行うために、対象のフィールドをセル配列の配列に変換して比較を行うことができます。この比較により、元の構造にインデックスを付けるために使用できる論理配列が生成されます。

例えば

% Some example data
s = struct('id', {1, 2, 3}, 'n', {'a', 'b', 'c'}, 'Budget', {100, 200, 300});

% Remove all entries with id == 2
s = s([s.id] ~= 2);

% Remove entries that have an id of 2 or 3
s = s(~ismember([s.id], [2 3]));

% Find ones with an `n` of 'a' (uses a cell array since it's strings)
s = s(ismember({s.id}, 'a'));
于 2016-06-21T00:38:34.740 に答える