2012-03-24 193 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