Remove structs from an array of structs
18 次查看(过去 30 天)
显示 更早的评论
I have a 1x1 struct A with 13 fields. One of these field, B, is a 15x1 cell, each cell is a 1x1 struct with 5 fields. How can I remove some of these structures contained in the cell with particular value in the field called 'name'? I've tried in this way:
for k = 1 : length(A.B) if A.B{k,1}.name = 'relax' A.B{k,1} = [] end end
The error is:
Error: File: xxx.m Line: 5 Column: 45 The expression to the left of the equals sign is not a valid target for an assignment.
0 个评论
采纳的回答
Guillaume
2016-2-5
= is for assignment, == is for comparison. However, == does not work with strings, you use strcmp for that:
for cellidx = 1 : numel(A.B) %numel is a lot safer than length
if strcmp(A.B{cellidx}.name, 'relax')
A.B{cellidx} = [];
end
end
2 个评论
Guillaume
2016-2-5
编辑:Guillaume
2016-2-5
reshape will never remove any element. If you wanted to get rid of the cells of B instead of filling them with empty, this is what you should have done:
for cellidx = 1 : numel(A.B) %numel is a lot safer than length
if strcmp(A.B{cellidx}.name, 'relax')
A.B(cellidx) = []; %note the use of () instead of {}
end
end
{} refers to the content of a cell, therefore when you do B{x} = []; you put empty in cell x.
() referes to the cell itself, therefore when you do B(x) = []; you remove the cell x itself.
If you've already set the cells content to empty, to delete those cells you'd do:
A.B(cellfun(@isempty, A.B)) = [];
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!