【问题标题】:How can I merge structures/structure arrays in MATLAB?如何在 MATLAB 中合并结构体/结构体数组?
【发布时间】:2016-05-04 07:22:39
【问题描述】:

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

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

【问题讨论】:

标签: arrays matlab merge concatenation matlab-struct


【解决方案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 处理您有多个具有不同字段的结构并且您希望将它们合并为一个具有 字段的单一结构的情况em>所有来自每个单独结构的字段。这里需要注意的是如何处理冲突:如果同一个字段出现在多个结构中,最终合并的结构中会出现哪个字段值?

【讨论】:

    【解决方案2】:

    以下是这样做的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多