4

構造体配列が与えられた場合、フィールドの名前を変更するにはどうすればよいですか? たとえば、次の場合、「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)

「最良」がパフォーマンス、明快さ、および一般性のバランスである場合、最良の方法は何ですか?

4

3 に答える 3

9

Matthewのこのソリューションを拡張して、新しいフィールド名と古いフィールド名が文字列として保存されている場合は、動的フィールド名を使用することもできます。

newName = 'baz';
oldName = 'bar';
[a.(newName)] = a.(oldName);
a = rmfield(a,oldName);
于 2010-04-29T15:54:59.177 に答える
4

リスト展開/ でそれを行う方法は次のrmfieldとおりです。

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

最初の行はもともと と書かれ[a(:).baz] = deal(a(:).bar);ていましたが、SCFrench は不要であると指摘しましたdeal

于 2010-04-28T22:40:19.417 に答える
2

struct2cell/cell2struct でそれを行う方法は次のとおりです。

f = fieldnames(a);
f{strmatch('bar',f,'exact')} = 'baz';
c = struct2cell(a);
a = cell2struct(c,f);
disp(a)
于 2010-04-28T22:36:38.247 に答える