Как переименовать поле в структурном массиве в MATLAB? - PullRequest
2 голосов
/ 29 апреля 2010

Учитывая массив структур, как мне переименовать поле? Например, учитывая следующее, как я могу изменить «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)

Каков наилучший метод, где «лучшим» является баланс производительности, ясности и универсальности?

Ответы [ 3 ]

7 голосов
/ 29 апреля 2010

Расширяя это решение от Мэтью, вы также можете использовать динамические имена полей , если новые и старые имена полей хранятся в виде строк:

newName = 'baz';
oldName = 'bar';
[a.(newName)] = a.(oldName);
a = rmfield(a,oldName);
4 голосов
/ 29 апреля 2010

Вот способ сделать это с расширением списка / rmfield:

[a.baz] = a.bar;
a = rmfield(a,'bar');
disp(a)

Первая строка была первоначально написана [a(:).baz] = deal(a(:).bar);, но SCFrench указал, что deal не требуется.

2 голосов
/ 29 апреля 2010

Вот способ сделать это с помощью struct2cell / cell2struct:

f = fieldnames(a);
f{strmatch('bar',f,'exact')} = 'baz';
c = struct2cell(a);
a = cell2struct(c,f);
disp(a)
...