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?
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)
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.