如何在 Matlab 中使用 containers.Map 并将元胞数组作为键,将整数向量作为值
How do I use containers.Map in Matlab with a cell array as the keys and a vector of integers as the values
我有一个元胞数组,其中包含 'a'、'b' 和 'c' 等词。我想要做的是使用 Matlab 的 containers.Map 来制作一个散列 table,我可以为每个键添加值并能够快速查找它们。如果我没有按如下方式预先初始化我的 containers.Map 对象,我可以做到这一点,但它不允许我(或者至少我还没有找到方法)稍后添加更多 key/value 对和使得我必须在循环的每次迭代期间重新初始化对象:
key = {'a','b','c'};
newmap = containers.Map(key,[1,2,3]);
我的问题是我需要能够不断地向散列 table 添加新键,因此不能每次都继续初始化 containers.Map 对象,我想要一个长散列 table 以及我在循环中获得的所有键和值。
这是我正在尝试运行的代码,我希望能够同时将键添加到 containers.Map 对象 newmap 及其对应的值。键始终是元胞数组中的字符串,值始终是整数:
key = {'a','b','c'};
val = [1,2,3];
newmap = containers.Map(); % containers.Map object initialization
newmap(key) = val;
我想要的输出是这样的:
newmap(key)
ans = 1 2 3
解决此问题的尝试:
我曾尝试使用 cellstr() 和 char() 转换键元胞数组,但没有成功。尝试此操作时我似乎不断收到此错误:
Error using containers.Map/subsref
Specified key type does not match the type expected for this container.
感谢您的帮助。
% Initialize
map = containers.Map('KeyType','char','ValueType','double');
% Assume you get these incrementally
key = {'a','b','c'};
val = [1,2,3];
% Add incrementally
for ii = 1:numel(key)
map(key{ii}) = val(ii);
end
您可以一次检索给定键集的所有值,但您将获得一个元胞数组。没有办法绕过它,但你可以用 cell2mat()
转换,或者用循环 map(key{ii})
增量检索
% Retrieve all
values(map,key)
ans =
[1] [2] [3]
我有一个元胞数组,其中包含 'a'、'b' 和 'c' 等词。我想要做的是使用 Matlab 的 containers.Map 来制作一个散列 table,我可以为每个键添加值并能够快速查找它们。如果我没有按如下方式预先初始化我的 containers.Map 对象,我可以做到这一点,但它不允许我(或者至少我还没有找到方法)稍后添加更多 key/value 对和使得我必须在循环的每次迭代期间重新初始化对象:
key = {'a','b','c'};
newmap = containers.Map(key,[1,2,3]);
我的问题是我需要能够不断地向散列 table 添加新键,因此不能每次都继续初始化 containers.Map 对象,我想要一个长散列 table 以及我在循环中获得的所有键和值。
这是我正在尝试运行的代码,我希望能够同时将键添加到 containers.Map 对象 newmap 及其对应的值。键始终是元胞数组中的字符串,值始终是整数:
key = {'a','b','c'};
val = [1,2,3];
newmap = containers.Map(); % containers.Map object initialization
newmap(key) = val;
我想要的输出是这样的:
newmap(key)
ans = 1 2 3
解决此问题的尝试:
我曾尝试使用 cellstr() 和 char() 转换键元胞数组,但没有成功。尝试此操作时我似乎不断收到此错误:
Error using containers.Map/subsref
Specified key type does not match the type expected for this container.
感谢您的帮助。
% Initialize
map = containers.Map('KeyType','char','ValueType','double');
% Assume you get these incrementally
key = {'a','b','c'};
val = [1,2,3];
% Add incrementally
for ii = 1:numel(key)
map(key{ii}) = val(ii);
end
您可以一次检索给定键集的所有值,但您将获得一个元胞数组。没有办法绕过它,但你可以用 cell2mat()
转换,或者用循环 map(key{ii})
% Retrieve all
values(map,key)
ans =
[1] [2] [3]