我正在尝试合并两个具有相同字段的结构。我尝试了几种方法,例如this和this。但它要么横向发展,要么根本不起作用。
我的两个(简化)结构是
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;
这是一种简单的方法吗?在我的真实结构中,有两个以上的字段有超过一千个值。
答案 0 :(得分:1)
这在a comment by Matthias W.简洁地回答了,所以我在这里详细说明......
当structures具有相同的字段时,您可以将它们视为concatenating时的任何其他对象。上述示例的解决方案是:
c = [a b];
由于a
和b
在这种情况下是1乘2结构数组,因此horizontally concatenates将它们转换为更大的1乘4结构数组。如果a
和b
的尺寸/尺寸未知,我们可以这样做:
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