我有一个如下的结构数组:
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'))
如果我继续为这些字段添加字段和条件,则放大将变得非常麻烦。
答案 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