我想结合两个具有不同字段名称的结构。

例如,从以下开始:

A.field1 = 1;
A.field2 = 'a';

B.field3 = 2;
B.field4 = 'b';

我想拥有:
C.field1 = 1;
C.field2 = 'a';
C.field3 = 2;
C.field4 = 'b';

有没有比使用“fieldnames”和for循环更有效的方法?

编辑:我们假设在字段名称冲突的情况下,我们优先考虑A

最佳答案

没有碰撞,您可以

M = [fieldnames(A)' fieldnames(B)'; struct2cell(A)' struct2cell(B)'];
C=struct(M{:});

这是相当有效的。但是,重复字段名上的struct错误,并使用unique对其进行预检查会降低性能,以至于循环会更好。但是,结果如下所示:
M = [fieldnames(A)' fieldnames(B)'; struct2cell(A)' struct2cell(B)'];

[tmp, rows] = unique(M(1,:), 'last');
M=M(:, rows);

C=struct(M{:});

您可以通过假设没有冲突并在对struct的调用周围使用try / catch来优雅地降级到冲突处理情况,从而制定出一种混合解决方案。

关于matlab - 在MATLAB中结合两种结构的有效方法有哪些?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38645/

10-09 08:20