【发布时间】:2017-11-03 23:00:29
【问题描述】:
我想按如下方式重新排序结构:
%// original struct
s(1).a = rand(10,1);
s(2).a = rand(10,1);
s(1).b = rand(10,1);
s(2).b = rand(10,1);
%// reorder to:
y(1).a = s(1).a;
y(2).a = s(2).a;
y(1).b.c = s(1).b;
y(2).b.c = s(2).b;
以下嵌套循环有效:
fieldToMove = 'b';
newFieldname = 'c';
fn = fieldnames(s);
for ii = 1:numel(fn)
for jj = 1:numel(s)
if strcmp(fn{ii},fieldToMove)
y(jj).(fn{ii}).(newFieldname) = s(jj).(fn{ii});
else
y(jj).(fn{ii}) = s(jj).(fn{ii});
end
end
end
但这对我来说似乎有点过头了。任何想法如何优化或简化它?
我对临时值进行了很多实验,用rmfield 删除了原始字段,并用setfield 设置了新字段,但到目前为止,没有任何效果,因为始终需要标量结构。有没有我忽略的功能?
【问题讨论】:
标签: matlab struct vectorization