2016-06-21 3 views
0

1x10構造体配列にはたくさんのフィールドがありますが、構造体配列からフィールド変数の特定の値を持つ要素を削除したいと考えています。 私は探している値を知っていて、探しているはずのフィールドを見つけたら、構造体配列から要素を削除する方法も知っています。問題は、(可能であれば)ブルートフォースの解決策、すなわち構造体配列の要素を通って私が探している値と比較するfor-loopを通らずにエレガントに識別する方法です(可能な場合)。 サンプルコード:フィールドを持つ1×10構造体の配列としてバイヤー: ID、nは、予算 とid_testなどのID値に見つけるための変数= 12フィールド値に基づいて構造体の要素を見つける

答えて

1

あなたはstructの配列を持っている場合は、その事実を使用することができます、ドット参照を使用すると、comma-separated listが作成されます。これを[]で囲むと、配列の作成が試みられ、{}に囲むとセル配列に強制されます。

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')); 
+0

これは私が探していたまさにです! 1つのライナーは、自分のフィールドの1つから削除する必要がある要素を特定するだけでなく、削除します。ありがとう! – Leon

関連する問題