我想知道从另一个具有不同字段的结构更新Matlab结构的最简单方法。请看我的例子,了解我的意思。我有两个结构S1和S2,我想要结合不同的字段名。
S1.a = 1;
S1.b = 2;
S2.c = 3;
S2.d = 4;
如果我写S1 = S2;
,S1结构显然会被S2覆盖。我希望结果如下代码:
S1.a = 1;
S1.b = 2;
S1.c = 3;
S1.d = 4;
有没有一种简单的方法可以做到这一点。我设法通过使用for循环和fieldnames()
函数来实现它,以便从S2获取字段名并将其放在S1中,但它并不是一个真正的解决方案。
答案 0 :(得分:3)
我怀疑有真正的矢量化方式。如果你真的需要最后一点点速度,不要使用结构。
这是循环解决方案:
fn = fieldnames(S2)
for ii = 1:numel(fn), S1.(fn{ii}) = S2.(fn{ii}); end
没有简单解决方案的原因是,Matlab事先无法知道c
中没有字段d
或S1
,如果是,会有冲突。
Jolo's answer似乎是矢量化的,但我不知道这些功能在内部是如何工作的。它们可能没有简单的循环快。
答案 1 :(得分:2)
如果您知道两个结构不具有相同的字段
,这可能会有所帮助 tmp = [fieldnames(S1), struct2cell(S1); fieldnames(S2), struct2cell(S2)].';
S1 = struct(tmp{:});