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é?

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top