我在 Matlab 工作。我已经定义:
a(1).x=1;
a(1).y=2;
a(1).z.w=3;
a(2).x=4;
a(2).y=5;
a(2).z.w=6;
我现在尝试在 a(1) 和 a(2) 两个结构中添加字段,这样我得到:
c.x = 5;
c.y = 7;
c.z.w = 9;
知道如何以优雅的方式做到这一点吗?请注意,在原始问题中,结构有更多的字段(大约 50 个)。
非常感谢您! 何塞
最佳答案
这是一个解决方案,适用于任何深度的结构
脚本代码(或 MATLAB 命令)
a(1).x=1;
a(1).y=2;
a(1).z.w=3;
a(2).x=4;
a(2).y=5;
a(2).z.w=6;
c=a(1);
c = returnStruct(c, a(2));
%{
you can also sum any amount of structs
for i=2:length(a)
c=returnStruct(c, a(i));
end
%}
用递归函数
function rs = returnStruct(s,a)
fn = fieldnames(s);
for i=1:length(fn)
if isstruct(s.(fn{i}))
s.(fn{i}) = returnStruct(s.(fn{i}), a.(fn{i}));
else
s.(fn{i}) = s.(fn{i})+a.(fn{i});
end
end
rs = s;
end
我针对更深层次的结构对其进行了测试,它运行良好。也许,您必须根据自己的情况稍微调整一下,但这应该是正确的方法。
不幸的是,struct2cell
之类的函数只能转换第一层,因此您需要其他东西。
关于Matlab:如何对两个等效结构的字段求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591458/