Sounds like you want containers.Map
You can store the name/value pairs in a cell array, then stick these into a map for later reference
% 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) );
You can then evaluate this in two ways
% For a single value
m( 'Name1' ) % = 'Tag1';
% For one or more values
m.values( {'Name1','Name2'} ) % = {'Tag1','Tag2'};
The only real advantage of using a map here is syntax unless your data especially lends itself to being in this structure. It isn't much harder to just use logical indexing once you have the data
array
data( ismember(data(:,1), 'Name1'), 2 ) % = {'Tag1'}
You could even make an anonymous function as shorthand for this operation (after defining data
), which saves requiring the .values
syntax used by maps
f = @(str) data( ismember( data(:,1), str ), 2 );
f( 'Name1' ) % = {'Tag1'}
f( {'Name1','Name2'} ) % = {'Tag1','Tag2'}
Note that the ismember
approach will not throw an error if your 'NameX'
is not found, whereas the map will throw an error if the key doesn't exist.