使用多个条件查找结构数组的索引

时间:2019-04-14 21:52:06

标签: matlab struct matlab-struct

我有一个如下的结构数组:

configStruct = 
20x1 struct array with fields:
    type
    id
    manufacturer
    model

如何找到带有字段的元素的索引,例如:

            type: 'Mainframe'
              id: '5'
    manufacturer: 'IBM'
           model: 'z14'

我已经弄清楚了如何仅使用一个条件来查找结构的索引:

find(strcmp({configStruct.type},'Mainframe'))

将其扩展到两个条件将类似于:

find(strcmp({configStruct.type},'Mainframe') & strcmp({configStruct.id},'5'))

如果我继续为这些字段添加字段和条件,则放大将变得非常麻烦。

2 个答案:

答案 0 :(得分:2)

只需遍历它。

LogIdx = arrayfun(@(n) isequal(configStruct(n),Element), 1:numel(configStruct));
%where Element is the struct that you want to find in configStruct

上面的行给出了逻辑索引。如果需要线性索引,请进一步使用:

LinIdx = find(LogIdx);

答案 1 :(得分:0)

我不知道任何本机函数可以满足您的要求,但是我建议您将各种strcmp分解为子函数:

global configStruct
find(isType('Mainframe') & isId('5'));

function val = isType(type)
global configStruct
val = strcmp({configStruct.type}, type);
end

function val = isId(id)
global configStruct
val = strcmp({configStruct.type}, id);
end