如何在MATLAB中重命名结构数组中的字段?

时间:2010-04-28 22:35:51

标签: matlab field rename matlab-struct

给定结构数组,如何重命名字段?例如,给定以下内容,如何将“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 个答案:

答案 0 :(得分:7)

从Matthew扩展this solution,如果新旧字段名称存储为字符串,您也可以使用dynamic field names

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

答案 1 :(得分:4)

这是使用列表展开/ rmfield

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

第一行最初是[a(:).baz] = deal(a(:).bar);,但SCFrench指出deal是不必要的。

答案 2 :(得分:2)

这是使用struct2cell / cell2struct执行此操作的方法:

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