听起来像你想要的 containers.Map
您可以将名称/值对存储在单元格数组中,然后将其粘贴到映射中以供以后参考
% Create loop data
N = 10;
data = cell(N,2);
for ii = 1:N
data{ii,1} = sprintf( 'Name%.0f', ii );
data{ii,2} = sprintf( 'Tag%.0f', ii );
end
% Create map
m = containers.Map( data(:,1), data(:,2) );
然后,您可以通过两种方式对此进行评估
% For a single value
m( 'Name1' ) % = 'Tag1';
% For one or more values
m.values( {'Name1','Name2'} ) % = {'Tag1','Tag2'};
在这里使用映射的唯一真正优势是语法,除非您的数据特别适合采用这种结构。拥有data
数组后,仅使用逻辑索引并不难
data( ismember(data(:,1), 'Name1'), 2 ) % = {'Tag1'}
您甚至可以将匿名函数作为此操作的简写形式(在定义之后data
),从而省去.values
了 map使用的语法
f = @(str) data( ismember( data(:,1), str ), 2 );
f( 'Name1' ) % = {'Tag1'}
f( {'Name1','Name2'} ) % = {'Tag1','Tag2'}
请注意,
ismember
如果'NameX'
找不到您的方法,则该方法不会引发错误,而如果键不存在,则 map将引发错误。