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

如何在MATLAB中重命名结构数组中的字段?,matlab,field,rename,matlab-struct,Matlab,Field,Rename,Matlab Struct,给定结构数组,如何重命名字段?例如,给定以下内容,如何将“bar”更改为“baz” 最佳方法是什么,其中“最佳”是性能、清晰性和通用性的平衡?以下是使用struct2cell/cell2struct的一种方法: f = fieldnames(a); f{strmatch('bar',f,'exact')} = 'baz'; c = struct2cell(a); a = cell2struct(c,f); disp(a) 下面是一种通过列表扩展来实现的方法/rmfield: [a.baz] =

给定结构数组,如何重命名字段?例如,给定以下内容,如何将“bar”更改为“baz”


最佳方法是什么,其中“最佳”是性能、清晰性和通用性的平衡?

以下是使用struct2cell/cell2struct的一种方法:

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

下面是一种通过列表扩展来实现的方法/
rmfield

[a.baz] = a.bar;
a = rmfield(a,'bar');
disp(a)
第一行最初编写为
[a(:).baz]=deal(a(:).bar)
,但SCFrench指出,
交易
是不必要的。

从Matthew开始展开,如果新旧字段名存储为字符串,也可以使用:

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

你不需要在第一行交易。你可以使用[a.baz]=a.bar;更好!我将修改这个答案。函数rmfield.m正是这样做的。关于性能,rmfield非常慢。通常不需要在结构中重命名字段。我没有意识到rmfield是在MATLAB代码中实现的。是的,它正在做一些非常相似的事情。感谢您的指点。(MathWorks员工,请参阅g560416。)
newName = 'baz';
oldName = 'bar';
[a.(newName)] = a.(oldName);
a = rmfield(a,oldName);