Мне нужно получить данные по индексу строки, например table ('one')% возвращает 1. Есть ли такая структура данных в MATLAB? Как это реализовано?
В последних версиях MATLAB существует структура данных containers.Map
. Подробнее см. Контейнеры карт MATLAB. Это устраняет некоторые ограничения при использовании STRUCT. Например
c = containers.Map
c('foo') = 1
c(' not a var name ') = 2
keys(c)
values(c)
Структура может использоваться как своего рода хеш-таблица:
>> 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.
namelengthmax
(63) символов
Containers.Map
Этот вопрос является точной копией stackoverflow.com/questions/3591942/hash-tables-in-matlab