Как переименовать поле в структурном массиве в 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)