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

Find Index of Structure Array with multiple criteria

我有一个结构数组如下:

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'))

如果我继续为这些字段添加字段和条件,那么扩大规模将变得非常麻烦。

我不知道有任何原生函数可以满足您的要求,但我建议您将各种 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

只是循环它。

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);