如何在MATLAB中使用哈希表(字典)?

Noo*_*one 32 matlab

我需要通过字符串索引访问数据,如table('one')%返回1.MATLAB中是否有这样的数据结构?它是如何实现的?

Edr*_*ric 53

在最近的MATLAB版本中,有containers.Map数据结构.有关更多信息,请参见MATLAB Map容器.这样可以消除使用STRUCT时的一些限制.例如

c = containers.Map
c('foo') = 1
c(' not a var name ') = 2
keys(c)
values(c)
Run Code Online (Sandbox Code Playgroud)

  • **未来注意**:从 MATLAB R2022b 开始,现在建议使用 [`dictionary`](https://www.mathworks.com/help/releases/R2022b/matlab/ref/dictionary.html) 而不是 [`容器.Map`](https://www.mathworks.com/help/matlab/ref/containers.map.html)。有关如何使用“字典”,请参阅[重复](/sf/ask/251435971/)。 (2认同)

nib*_*bot 17

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

>> foo.('one')=1

foo = 

    one: 1

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

ans =

     2
Run Code Online (Sandbox Code Playgroud)

要查询结构是否包含特定字段(键),请使用isfield:

>> isfield(foo,'two')

ans =

     1
Run Code Online (Sandbox Code Playgroud)

这种方案的缺点是只有作为有效Matlab变量名的字符串才能用作键.例如:

>> foo.('_bar')=99;
??? Invalid field name: '_bar'.
Run Code Online (Sandbox Code Playgroud)

要解决此限制,请使用Oli链接的问题中的一种解决方案.