使用循环或
arrayfun来确定哪些数组元素为空:
empty_elems = arrayfun(@(s) isempty(s.x) & isempty(s.y),A.B)
返回:[0 1 0]
要么
empty_elems = arrayfun(@(s) all(structfun(@isempty,s)), A.B);
检查所有字段是否为空(使用any而不是all来检查是否有任何元素为空而不是全部).
A.B(empty_elems) = [];
在评论中完整解决您的问题:
% find array elements that have all fields empty:
empty_elems = arrayfun(@(s) all(structfun(@isempty,s)), A.B);
% copy non-empty elements to a new array `C`:
C = A.B(~empty_elems);
% find elements of C that have y field >3
gt3_elems = arrayfun(@(s) s.y<3,C);
% delete those form C:
C(gt3_elems) = [];
逐步执行此代码并分析中间变量以了解发生了什么.应该相当清楚.