我想知道从具有不同字段的另一个结构更新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中,但这并不是一个真正的好解决方案。
我怀疑是否有真正的矢量化方法。如果你真的需要最后一点点的速度,不要使用structs。
以下是环路解决方案:
fn = fieldnames(S2)
for ii = 1:numel(fn), S1.(fn{ii}) = S2.(fn{ii}); end
之所以没有琐碎的解决方案,是因为Matlab无法提前知道S1
中没有字段c
或d
,如果是,就会发生冲突。
Jolo的答案似乎是矢量化的,尽管我不知道这些函数在内部是如何工作的。它们可能不会比简单的循环快多少。
如果您知道这两个结构没有相同的字段,这可能会有所帮助
tmp = [fieldnames(S1), struct2cell(S1); fieldnames(S2), struct2cell(S2)].';
S1 = struct(tmp{:});