3

我正在尝试合并两个具有相同字段的结构。我尝试了几种方法,例如thisthis。但它要么横盘整理,要么根本不起作用。

我的两个(简化)结构是

a(1).name = 'x';
a(1).data = 1;
a(2).name = 'y';
a(2).data = 2;

b(1).name = 'x';
b(1).data = 3;
b(2).name = 'y';
b(2).data = 4;

所需的输出与这将产生的输出相同:

c(1).name = 'x';
c(1).data = 1;
c(2).name = 'y';
c(2).data = 2;
c(3).name = 'x';
c(3).data = 3;
c(4).name = 'y';
c(4).data = 4;

有什么简单的方法可以做到这一点?在我的真实结构中,有两个以上的字段具有超过一千个值。

4

2 回答 2

1

这在Matthias W. 的评论中得到了简洁的回答,所以我将在这里详细说明......

结构具有相同的字段时,您可以在连接它们时将它们视为任何其他对象。上述示例的解决方案是:

c = [a b];

由于ab在这种情况下是 1×2 结构数组,因此这会将它们水平连接成一个更大的 1×4 结构数组。a如果和的尺寸/尺寸b未知,我们可以这样做:

c = [a(:).' b(:).'];

这使用冒号运算符将它们重塑为列数组,然后在连接它们之前将它们转置为行数组。

更复杂的案例...

  • 跨结构合并字段: 此问题涉及要将多个结构(具有相同字段)组合成单个结构(不是结构数组)的情况。在这种情况下,每个单独的字段都被连接到多个结构中。

  • 将不同的结构合并为一个: 此问题涉及您有多个具有不同字段的结构并且您希望将它们合并为一个具有每个单独结构的所有字段的单一结构的情况。这里必须考虑的警告是如何处理冲突:如果同一个字段出现在多个结构中,那么哪个字段值出现在最终合并的结构中?

于 2017-03-22T17:56:30.850 回答
1

以下是这样做的。

%-------------------------------------------------------
a(1).name = 'x';
a(1).data = 1;
a(2).name = 'y';
a(2).data = 2;
b(1).name = 'x';
b(1).data = 3;
b(2).name = 'y';
b(2).data = 4;

c = struct('name',{a(:).name,b(:).name},'data',{a(:).data,b(:).data});
%-------------------------------------------------------
>> c(1)
ans =
    name: 'x'
    data: 1
>> c(2)
ans =
    name: 'y'
    data: 2
>> c(3)
ans =
    name: 'x'
    data: 3
>> c(4)
ans =
    name: 'y'
    data: 4
于 2017-03-22T17:40:29.093 回答