web-dev-qa-db-fra.com

Comment utiliser les tables de hachage (dictionnaires) dans MATLAB?

J'ai besoin d'accéder aux données par index de chaîne, comme table ('one')% renvoie 1 . Existe-t-il une telle structure de données dans MATLAB? Comment est-il mis en œuvre?

32
NoobDev4iPhone

Dans les versions récentes de MATLAB, il y a le containers.Map Structure de données. Voir Conteneurs de la carte MATLAB pour en savoir plus. Cela supprime certaines des restrictions lors de l'utilisation de STRUCTs. Par exemple

c = containers.Map
c('foo') = 1
c(' not a var name ') = 2
keys(c)
values(c)
53
Edric

Une structure peut être utilisée comme une sorte de table de hachage:

>> foo.('one')=1

foo = 

    one: 1

>> foo.('two')=2;
>> x = 'two';
>> foo.(x)

ans =

     2

Pour demander si une structure contient un champ particulier (clé), utilisez isfield:

>> isfield(foo,'two')

ans =

     1

L'inconvénient de ce schéma est que seules les chaînes qui sont également des noms de variables Matlab valides peuvent être utilisées comme clés. Par exemple:

>> foo.('_bar')=99;
??? Invalid field name: '_bar'.

Pour contourner cette restriction, utilisez l'une des solutions de la question liée par Oli.

17
nibot