Как использовать Hash Tables (словари) в MATLAB?

32

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

Теги:

2 ответа

51
Лучший ответ

В последних версиях MATLAB существует структура данных containers.Map. Подробнее см. Контейнеры карт MATLAB. Это устраняет некоторые ограничения при использовании 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'.

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

  • 0
    Еще одним недостатком этого подхода является то, что имена ключей должны быть меньше, чем namelengthmax (63) символов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню