我想结合两个具有不同字段名称的结构。
例如,从以下开始:
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/