Найти индекс структуры массива с несколькими критериями - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть массив структур следующим образом:

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 ]

2 голосов
/ 15 апреля 2019

Просто зациклите его.

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);
0 голосов
/ 15 апреля 2019

Я не знаю, какая бы нативная функция сделала бы то, что вы просите, но я рекомендую разбить все виды 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
...