如何在 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]