如何在MATLAB中合并结构/结构数组?

时间:2016-01-27 11:12:07

标签: arrays matlab merge concatenation matlab-struct

我正在尝试合并两个具有相同字段的结构。我尝试了几种方法,例如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;

这是一种简单的方法吗?在我的真实结构中,有两个以上的字段有超过一千个值。

2 个答案:

答案 0 :(得分:1)

这在a comment by Matthias W.简洁地回答了,所以我在这里详细说明......

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

c = [a b];

由于ab在这种情况下是1乘2结构数组,因此horizontally concatenates将它们转换为更大的1乘4结构数组。如果ab的尺寸/尺寸未知,我们可以这样做:

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

这使用colon operator将它们重新整形为列数组,然后在连接它们之前transposes将它们转换为行数组。

更复杂的案例......

  • 跨结构合并字段: This question处理当您想要将多个结构(具有相同字段)组合到单个中的情况结构(不是结构数组)。在这种情况下,每个单独的字段正在多个结构中连接。

  • 将不同的结构合并为一个: This question处理具有不同字段的多个结构并且您希望将它们合并到单个结构, all 来自每个单独结构的字段。这里必须考虑的警告是如何处理碰撞:如果相同的字段出现在多个结构中,哪个字段值出现在最终的合并结构中?

答案 1 :(得分:0)

以下是这样的。

%-------------------------------------------------------
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