Matlab 搜索嵌套属性';通过类数组对值进行排序

Matlab 搜索嵌套属性';通过类数组对值进行排序,matlab,Matlab,假设我们有一个类对象数组。我们的类是handle类的一个子类。我们可以使用findobj函数通过一级属性的值来查找句柄对象。没关系 例如,类结构: className |——property1 |——property2 |——structproperty1 ———|——innerProperty1 ———|——innerProperty2 findobj函数将仅在每个结构字段都已填充时返回结果。下面是一个例子 b: 1x1234 className structToFind = struct

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

例如,类结构:

className
|——property1
|——property2
|——structproperty1
———|——innerProperty1
———|——innerProperty2
findobj函数将仅在每个结构字段都已填充时返回结果。下面是一个例子

b: 1x1234 className

structToFind = struct ('innerProperty1', 10, 'innerProperty2', 20);
H = findobj (b, 'structproperty1', structToFind);
但我想通过innerProperty1搜索类名句柄对象。有什么办法吗

更新#1

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

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

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

b: 1x1234 className

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

您可以使用
struct2cell
将类名转换为单元格,这应该允许您在innerProperty上使用findobjstruct@GameOfThrowsclassName是类的名称,我无法将类处理程序转换为cellTry
H=findobj(b,'structproperty1',structToFind,'-depth',inf),但不知道这是否适用于您的hirarchy@marcowassmer-默认情况下,depth属性是无限的,请查看更新#1ok,不同的想法:
{b{cellfun(@(x)x.structproperty1.innerProperty1==10,b)}