-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. 仅当您需要动态字段名称时才使用动态字段名称。如果字段名称始终是访问它比访问它要好得多。CkC.CkC.(sprintf('Ck'))

  2. 尽量不要在 matlab中使用iandj作为变量名

  3. 如果您将其用作循环内部ii的索引,则更改循环内部的大小有点冒险。(参见例如这个问题)。C.CkforC.Ck

  4. 如果您只想丢弃C.Ck大于 10 的元素,您只需要

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

    或者

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