2010-04-28 55 views
2

给定一个结构数组,我该如何重命名一个字段?例如,鉴于以下情况,我如何将“bar”改为“baz”。如何在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) 

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

+0

(MathWorks公司的员工,看到g560416) – 2010-04-29 23:03:55

回答

7

this solution扩大从马修,你也可以使用dynamic field names如果新老字段名被存储为字符串:

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

这里是AA的方式与struct2cell/cell2struct做到这一点:

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

功能rmfield.m正是这样做的。关于性能rmfield是非常缓慢的。通常你不需要在结构中重命名字段。 – Mikhail 2010-04-29 05:30:21

+0

我没有意识到rmfield是在MATLAB代码中实现的。是的,它做的事情非常相似。感谢指针。 – 2010-04-29 15:14:14

4

这里是一种用列表扩展做/ rmfield

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

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

+4

你不需要在第一行处理。你可以使用[a.baz] = a.bar; – SCFrench 2010-04-29 02:11:29

+0

更好!我会修改这个答案。 – 2010-04-29 15:15:22

相关问题