Comment puis-je renommer un champ dans un tableau de structure dans Matlab?
-
02-10-2019 - |
Question
Étant donné un tableau de la structure, comment puis-je renommer un champ? Par exemple, compte tenu de ce qui suit, comment puis-je changer « bar » à « baz ».
clear
a(1).foo = 1;
a(1).bar = 'one';
a(2).foo = 2;
a(2).bar = 'two';
a(3).foo = 3;
a(3).bar = 'three';
disp(a)
Quelle est la meilleure méthode, où « meilleur » est un équilibre de la performance, la clarté et la généralité?
La solution
cette solution de Matthieu, vous pouvez également utiliser les noms de champs dynamiques si les noms de champs nouveaux et anciens sont stockés sous forme de chaînes:
newName = 'baz';
oldName = 'bar';
[a.(newName)] = a.(oldName);
a = rmfield(a,oldName);
Autres conseils
Voici une façon de le faire avec l'extension de liste / rmfield
:
[a.baz] = a.bar;
a = rmfield(a,'bar');
disp(a)
La première ligne a été écrit à l'origine [a(:).baz] = deal(a(:).bar);
, mais SCFrench a souligné que la deal
était inutile.
Voici une façon de le faire avec struct2cell / cell2struct:
f = fieldnames(a);
f{strmatch('bar',f,'exact')} = 'baz';
c = struct2cell(a);
a = cell2struct(c,f);
disp(a)