我在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));
我该如何解决这个问题?
感谢。
答案 0 :(得分:2)
要从数组中删除元素,只需将其分配给空数组([]
):
C.Ck(ii) = []; % removed the ii-th element of C.Ck.
仅在您需要动态时才使用dynamic field names。如果字段名称始终为Ck
,则C.Ck
的访问权限比C.(sprintf('Ck'))
要好得多。
如果您在ii
循环中使用C.Ck
作为for
的索引,则更改循环内C.Ck
的大小会有点冒险。 (参见例如this question)。
如果您只想丢弃大于10的C.Ck
元素,那么您需要的只是
C.Ck( C.Ck > 10 ) = [];
或
cleared = C.Ck( C.Ck <= 10 );