使用多个条件查找结构数组的索引
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);
我有一个结构数组如下:
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);