Как переименовать поле в структурном массиве в MATLAB?

Учитывая массив структуры, как мне переименовать поле? Например, учитывая следующее, как я могу изменить "бар" на "Баз".

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 ответа

Решение

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

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

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

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

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

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

f = fieldnames(a);
f{strmatch('bar',f,'exact')} = 'baz';
c = struct2cell(a);
a = cell2struct(c,f);
disp(a)
Другие вопросы по тегам