当前位置:  开发笔记 > 编程语言 > 正文

在MATLAB中组合两个结构有哪些有效的方法?

如何解决《在MATLAB中组合两个结构有哪些有效的方法?》经验,为你挑选了3个好方法。

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

例如,从以下开始:

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.



1> SCFrench..:

没有碰撞,你可以做到

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{:});

您可以通过假设没有冲突并在调用周围使用try/catch struct来优雅地降级到冲突处理案例来创建混合解决方案.



2> chappjc..:

简答:( setstructfields如果您有信号处理工具箱).


官方解决方案由Loren Shure在她的MathWorks博客上发布,并由SCFrench在这里和Eitan T对不同问题的回答进行了演示.但是,如果你有信号处理工具箱,一个简单的未记录的函数已经这样做了 - setstructfields.

help setstructfields

 setstructfields Set fields of a structure using another structure
    setstructfields(STRUCTIN, NEWFIELDS) Set fields of STRUCTIN using
    another structure NEWFIELDS fields.  If fields exist in STRUCTIN
    but not in NEWFIELDS, they will not be changed.

在内部它使用fieldnamesfor循环,因此它是一个便利函数,具有错误检查和自身结构的字段的递归.

"原始"结构:

% struct with fields 'color' and 'count'
s = struct('color','orange','count',2)

s = 
    color: 'orange'
    count: 2

包含新值的第二个结构'count',以及一个新字段'shape':

% struct with fields 'count' and 'shape'
s2 = struct('count',4,'shape','round')

s2 = 
    count: 4
    shape: 'round'

致电setstructfields:

>> s = setstructfields(s,s2)
s = 
    color: 'orange'
    count: 4
    shape: 'round'

该字段'count'更新.该字段'shape'添加.该领域'color' 保持不变.

注意:由于该功能未记录,因此可能随时更改或删除.



3> Dennis Jaher..:

我在File Exchange上找到了一个很好的解决方案:catstruct.

如果不测试性能,我可以说它完全符合我的要求.它当然可以处理重复的字段.

下面是它的工作原理:

a.f1 = 1;
a.f2 = 2;
b.f2 = 3;
b.f4 = 4;

s = catstruct(a,b)

会给

s = 

    f1: 1
    f2: 3
    f3: 4

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有