Matlab R2011b中是否有任何方法可以将逻辑索引应用于对象数组?应该返回满足其属性的特定条件的对象。最好的解决方案也可以是对象数组,它是另一个对象(聚合)的属性。
在我的项目中,有许多实体必须通过它们的多种特征来识别。具有其属性的Matlab对象为此提供了明确的数据基础。使用结构(或单元格)和索引数组的替代方法似乎太混乱了。不幸的是,对对象属性的访问有点复杂。
例如,应返回myArray中Element.val == 3的所有对象:
elementsValIsThree = myElements(Element.val==3);
目前为止的最佳解决方案:
find([myElements.val]==3);
但是如果输入了myElements的子集,那么这不会返回对象而不是绝对索引。
另一次尝试只返回第一个Element,需要常量属性:
myElements(Element.val==3);
具有类定义等的最小示例以便澄清:
% element.m
classdef Element
properties
val
end
methods
function obj = Element(value)
if nargin > 0 % to allow empty construction
obj.val = value;
end
end
end
end
创建元素对象数组:
myElements(4) = Element(3)
现在myElements(4)
有val=3
。
答案 0 :(得分:2)
我不确定我是否理解了这个问题,但逻辑索引可以生成为
arrayfun(@(e) isequal(e.val,3), myElements);
因此,选择myElements
字段等于val
的{{1}}元素:
3