2010-04-28 264 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

相關問題