6

我想知道从另一个具有不同字段的结构更新 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,但这并不是一个真正的解决方案。

4

2 回答 2

3

我怀疑是否存在真正的矢量化方式。如果您真的需要最后一点点速度,请不要使用结构。

这是循环解决方案:

fn = fieldnames(S2)
for ii = 1:numel(fn), S1.(fn{ii}) = S2.(fn{ii}); end

之所以没有琐碎的解决方案,是因为Matlab无法提前知道没有字段cdin S1,如果有,就会发生冲突。


Jolo 的答案似乎是矢量化的,尽管我不知道这些函数在内部是如何工作的。而且它们可能不会比简单循环快多少。

于 2015-11-19T07:11:40.413 回答
2

如果您知道这两个结构没有相同的字段,这可能会有所帮助

tmp = [fieldnames(S1), struct2cell(S1); fieldnames(S2), struct2cell(S2)].'; S1 = struct(tmp{:});

于 2015-11-19T07:18:00.463 回答