尝试从struct字段中删除元素时出错

时间:2013-02-17 14:46:06

标签: matlab struct runtime-error

我在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));

我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:2)

要从数组中删除元素,只需将其分配给空数组([]):

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

一些评论:

  1. 仅在您需要动态时才使用dynamic field names。如果字段名称始终为Ck,则C.Ck的访问权限比C.(sprintf('Ck'))要好得多。

  2. 请勿尝试to use i and j as variable names in matlab

  3. 如果您在ii循环中使用C.Ck作为for的索引,则更改循环内C.Ck的大小会有点冒险。 (参见例如this question)。

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

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

    cleared = C.Ck( C.Ck <= 10 );