-1

次のコードがmatlabあり、構造体から要素を削除しようとしています:

function test()
    C = struct;
    C.(sprintf('Ck')) = [1 6 8 9; 8 6 9 7; 7 6 67 6; 65 7 8 7];
    ck_length = length(C.(sprintf('Ck')));
    for i=1:ck_length
        if C.(sprintf('Ck'))(i)> 10
           cleared = rmfield(C.(sprintf('Ck')), C.(sprintf('Ck'))(i));
        end
    end
end

しかし、プログラムを実行すると、次のようなエラーが表示されます。

>> test
??? Error using ==> rmfield at 19
S must be a structure array.

Error in ==> test at 89
   cleared = rmfield(C.(sprintf('Ck')), C.(sprintf('Ck'))(i));

この問題を解決するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

配列から要素を削除するには、空の配列 ( [])に割り当てるだけです。

C.Ck(ii) = []; % removed the ii-th element of C.Ck.

いくつかのコメント:

  1. 動的なフィールド名は、動的にする必要がある場合にのみ使用してください。フィールド名が常に である場合は、としてアクセスする方Ckがはるかに優れています。C.CkC.(sprintf('Ck'))

  2. andを matlab の変数名として使用ijしないようにしてください。

  3. ループ内iiのインデックスとして使用している場合、ループ内のサイズを変更するのは少し危険です。(たとえば、この質問を参照してください)。C.CkforC.Ck

  4. C.Ck10 より大きい要素を破棄するだけの場合は、

    C.Ck( C.Ck > 10 ) = [];
    

    また

    cleared = C.Ck( C.Ck <= 10 );
    
于 2013-02-17T14:52:47.980 に答える