通过类数组搜索嵌套属性的值

时间:2016-03-18 09:51:01

标签: matlab

假设我们有类对象的数组。我们的类是handle类的子类。我们可以使用findobj函数通过第一级属性的值来查找句柄对象。没关系。

例如,类结构:

className
|——property1
|——property2
|——structproperty1
———|——innerProperty1
———|——innerProperty2
只有填充了每个结构字段时,

findobj函数才会返回结果。以下是一个例子。

b: 1x1234 className

structToFind = struct ('innerProperty1', 10, 'innerProperty2', 20);
H = findobj (b, 'structproperty1', structToFind);

但我想通过innerProperty1搜索className句柄对象。有没有办法做到这一点?

更新#1

为避免误会,我想在不设置innerProperty2的情况下搜索对象数组,例如。但它将返回具有精确结构的类对象处理程序('innerProperty1',10)。因此,如果设置了object.structproperty1.innerProperty2,函数将不会返回下面示例的对象处理程序。

structToFind = struct ('innerProperty1', 10);
H = findobj (b, 'structproperty1', structToFind);

1 个答案:

答案 0 :(得分:1)

我找到了一个更简单的解决方案。 我用了findobj(H,'-function',fh)。我们可以使用函数句柄来过滤对象。所以对于这个测试例子,它应该是这样的:

b: 1x1234 className

H = findobj (b, '-function', 'structproperty1', @(x) isfield(x, 'innerProperty1') );

mathworks.com/help/matlab/ref/handle.findobj.html