Matlab映射使用char数组作为键查找某个键的值

时间:2018-01-23 20:18:05

标签: matlab dictionary

C = {'hello', 'goodbye', 'hola', 'hello hellen', 'helmet',     'hellorheaven', 'hillsboro', 'say hello', 'myfellow'}
defaultval = 100
key = {'hello', 'goodbye', 'hola', 'hello hellen', 'helmet', 'hellorheaven', 'hillsboro', 'say hello', 'myfellow'}
value = [defaultval, defaultval, defaultval,defaultval,defaultval,defaultval,defaultval,defaultval,defaultval]
mapObj = containers.Map(key,value )

for n = 1:length(C)
    d1 = strdist('goodfellow', C(n) )
    disp(C(n) ) 
    disp(mapObj('hello' ) )
    mapObj(C(n) ) = d1
end

在这种情况下,我试图用库函数计算字符串距离,并将距离保存到我创建的地图中。但即使C是一个char数组,我的地图的关键类型也是如此。我不能使用mapObj(C(n))来访问和更改我的值。我该如何解决?

mapObj = 

  Map with properties:

    Count: 9
  KeyType: char
ValueType: double

我试着按照这里的例子 https://www.mathworks.com/help/matlab/matlab_prog/modifying-keys-and-values-in-the-map.html ticketMap('A479GY')

ans =

莎拉莱瑟姆

然而,使用我的代码,我收到错误

使用containers.Map/subsasgn时出错 指定的密钥类型与此容器的预期类型不匹配。

exercise01中的错误(第76行)     mapObj(C(n))= d1

1 个答案:

答案 0 :(得分:1)

正如@excaza在评论中指出的那样,问题在于索引。使用圆括号,可以检索单元格。但是你的字典键实际上是键入字符串(确切地说,是一个字符数组)。为了从单元格数组中提取char数组,必须使用花括号。有关访问单元格中数据的更多信息,请阅读this documentation

keys = {'hello', 'goodbye', 'hola', 'hello hellen', 'helmet', 'hellorheaven', 'hillsboro', 'say hello', 'myfellow'};
keys_len = numel(keys);

vals = repmat(100,1,keys_len);

map = containers.Map(keys,vals);

for n = 1:keys_len
    key = keys{n};
    map(key) = strdist('goodfellow',key);
end