構造体配列が与えられた場合、フィールドの名前を変更するにはどうすればよいですか? たとえば、次の場合、「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)
「最良」がパフォーマンス、明快さ、および一般性のバランスである場合、最良の方法は何ですか?
構造体配列が与えられた場合、フィールドの名前を変更するにはどうすればよいですか? たとえば、次の場合、「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)
「最良」がパフォーマンス、明快さ、および一般性のバランスである場合、最良の方法は何ですか?
Matthewのこのソリューションを拡張して、新しいフィールド名と古いフィールド名が文字列として保存されている場合は、動的フィールド名を使用することもできます。
newName = 'baz';
oldName = 'bar';
[a.(newName)] = a.(oldName);
a = rmfield(a,oldName);
リスト展開/ でそれを行う方法は次のrmfield
とおりです。
[a.baz] = a.bar;
a = rmfield(a,'bar');
disp(a)
最初の行はもともと と書かれ[a(:).baz] = deal(a(:).bar);
ていましたが、SCFrench は不要であると指摘しましたdeal
。
struct2cell/cell2struct でそれを行う方法は次のとおりです。
f = fieldnames(a);
f{strmatch('bar',f,'exact')} = 'baz';
c = struct2cell(a);
a = cell2struct(c,f);
disp(a)