2017-10-03 14 views
1

で構造体のすべてのフィールドを削除します。私のような構造体がある場合は、特定のインデックス

myStruct = struct('a',[1,2,3],'b',[1,2,3],'c',[1,2,3]) 

を...そして、私はすべてのフィールドの2番目の要素を削除したい、私は次の操作を行います:

myStruct.a(2) = []; 
myStruct.b(2) = []; 
myStruct.c(2) = []; 

この操作を実行する簡単な方法はありますか。つまり、手動で各フィールド名を書き込む必要はありませんか?私は異なる状況でいくつかの異なるフィールドを継承する可能性のある構造体を持っているので、ハードコードするためにどのフィールドが存在するかを明示的に知ることはできません。そして、私がを知っても、が知っていたとしても、それはいくつかの行を取り上げることができます!

注:構造体をmyStruct(2).aの形式で配置することは可能ですが、ニーズに応じて構造体にフィールドを1つずつ追加できるので、myStruct.a(2)の形式を使用することをお勧めします。私が走っている特定のプログラムの

答えて

2

あなたは、各フィールドに匿名関数を適用するためにstructfunを使用することができます。

myStruct = structfun(@(x) x([1 3:end]), myStruct, 'UniformOutput', false); 
2

fieldnamesと動的フィールド名を認識していますか?

fnames = fieldnames (myStruct) 
for ii=1:length(fnames) 
    myStruct.(fnames{ii})(2) = []; 
end 
関連する問題