MATLAB: расширение списка значений в объекте container.Map - PullRequest
6 голосов
/ 31 января 2012

Я перечитывал документацию по использованию контейнера Matlab. Карта для создания чего-то похожего на словарь Python, но сталкиваюсь с некоторыми проблемами и надеюсь, что кто-то сможет пролить свет.

Есть ли способ расширить содержимое списка значений, привязанного к определенному ключу?например, скажем, для карты «карта», ключ «1234», у меня есть значение «1,0».

map(1234) = 1.0

Я хотел бы расширить список значений до [1.0 2.0], и как япопробуйте сделать это

map = containers.Map(1234,1.0)
map(1234) = [map(1234) 2.0]

, но я получаю сообщение об ошибке «Ошибка при использовании Containers.Map/subsasgn. Указанный тип значения не соответствует типу, ожидаемому для этого контейнера».

МожетЯ не ассоциирую массивы как значения с ключом карты?

Большое спасибо!

1 Ответ

8 голосов
/ 01 февраля 2012

Нескалярные массивы поддерживаются нормально, если ValueType 'any'. Похоже, проблема не в методе, который вы используете для расширения, а в типе ключа или значения.

Когда вы используете конструктор, который принимает ключ и значение, он выводит ключ и тип значения из переданных значений. Если значение скалярно double, оно выводит тип как 'double'. Это не поддерживает нескалярные массивы.

>> map = containers.Map(1234, 1.0);
>> disp(map.ValueType)
double

Конструктор контейнеров по умолчанию будет иметь KeyType 'char' и ValueType 'any'. Это будет иметь расширенное поведение, которое вы хотите, но вам придется использовать вместо этого символы char. Используйте форму конструктора, чтобы явно установить типы ключей и значений «double» и «any», и все будет работать так, как вы хотите.

map = containers.Map('KeyType','double', 'ValueType','any');
map(1234) = 1.0;
map(1234) = [map(1234) 2.0];
...