2012-01-31 7 views
5

Ho letto la documentazione per l'utilizzo del contenitore di Matlab.Mappa per creare qualcosa di simile a un dizionario Python, ma sto incontrando alcuni problemi e speravo che qualcuno potesse far luce.MATLAB: estendere la lista valori in container.Mappa oggetto

Esiste un modo per estendere il contenuto dell'elenco dei valori mappato su un determinato tasto? per esempio, dì per la mappa "mappa", il tasto "1234" ho un valore di "1.0".

map(1234) = 1.0 

vorrei estendere l'elenco dei valori per [1.0 2.0], e il modo in cui cerco di fare questo è

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

ma ricevo un errore che dice "Errore usando containers.Map/ subsasgn. Il tipo di valore specificato non corrisponde al tipo previsto per questo contenitore. "

Impossibile associare gli array come valori a una chiave mappa?

Grazie mille!

risposta

7

Gli array ncalcal sono supportati se il valore ValueType è "qualsiasi". Sembra che il problema non sia la tecnica che stai utilizzando per estendere, ma il tipo di chiave o valore.

Quando si utilizza il costruttore che accetta una chiave e un valore, esso deduce la chiave e il tipo di valore dai valori passati. Se il valore è doppio scalare, deduce il tipo da "doppio". Ciò non supporta gli array non scalari.

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

Il contenitore predefinito. Il costruttore di chiavi avrà KeyType "char" e ValueType "any". Avrà il comportamento di estensione che desideri, ma dovresti usare le chiavi di selezione. Utilizza il modulo costruttore per impostare in modo esplicito i tipi di chiave e valore su "double" e "any" e funzionerà nel modo desiderato.

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

grazie Andrea, il modo in cui ho inizializzato era come questo: – JoeMcG

+0

grazie Andrea, il modo in cui ho inizializzato era come questo: 'map = containers.Map (1234,1.0)' è anche possibile indicizzare all'interno di questo array senza copiare la mappa ('1234') su una nuova variabile? – JoeMcG

+0

Errore mio: sembra che il "doppio" ValueType accetti solo i valori scalari. Posso riprodurre. Cambiatelo per avere ValueType 'any' usando la chiamata del costruttore nella mia risposta, o inizializzando con un array non scalare come 'map = containers.Map (1234, [1.0 2.0]);' e funzionerà. –

Problemi correlati