2012-03-24 3 views
32

Мне нужно получить данные по индексу строки, например таблица ('один')% возвращается 1. Есть ли такая структура данных в MATLAB? Как это реализовано?Как использовать таблицы Hash (словари) в MATLAB?

+7

То, что вы ищете, 'Containers.Map' Этот вопрос является точной копией http://stackoverflow.com/questions/3591942/hash-tables-in-matlab – Oli

+1

(также кросс- дубликат http://www.mathworks.com/matlabcentral/answers/21130-dictionaries-of-hashtables-in-matlab) –

ответ

53

В последних версиях MATLAB есть структура данных containers.Map. См. MATLAB Map containers для получения дополнительной информации. Это устраняет некоторые ограничения при использовании STRUCT. Например

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'. 

Чтобы обойти это ограничение, используйте одно из решений в вопросе связаны Оли.

+0

Другим недостатком этого подхода является то, что имена ключей должны быть меньше, чем 'namelengthmax' (63) персонажей – rhombidodecahedron

Смежные вопросы