2012-03-24 584 views
32

我需要通过字符串索引来访问数据,如表('one')%返回1。 MATLAB中有这样的数据结构吗?它是如何实现的?如何在MATLAB中使用哈希表(字典)?

+7

你在找什么是'Containers.Map'这个问题http://stackoverflow.com/questions/3591942/hash-tables-in-matlab – Oli 2012-03-24 07:57:41

+1

完全相同的副本(也交叉http://www.mathworks.com/matlabcentral/answers/21130-dictionaries-of-hashtables-in-matlab) – 2012-03-24 10:45:54

回答

53

在最新版本的MATLAB中,有containers.Map数据结构。有关更多信息,请参阅MATLAB Map containers。这在使用STRUCTs时删除了一些限制。例如

c = containers.Map 
c('foo') = 1 
c(' not a var name ') = 2 
keys(c) 
values(c) 
17

的结构可以用作一种哈希表:

>> foo.('one')=1 

foo = 

    one: 1 

>> foo.('two')=2; 
>> x = 'two'; 
>> foo.(x) 

ans = 

    2 

要查询的结构是否包含一个特定的字段(键)时,使用isfield

>> isfield(foo,'two') 

ans = 

    1 

这样做的缺点方案是只有那些也是有效的Matlab变量名称的字符串可以用作关键字。例如:

>> foo.('_bar')=99; 
??? Invalid field name: '_bar'. 

要解决此限制,请使用Oli链接问题中的某个解决方案。

+0

这种方法的另一个缺点是键的名字必须小于'namelengthmax'( 63)个字符 – rhombidodecahedron 2015-04-23 19:20:36