如何在Matlab中向结构体数组添加新元素?

5
如何向结构数组中添加新元素?我无法与空结构连接起来:
>> a=struct;
>> a.f1='hi'

a = 

    f1: 'hi'

>> a.f2='bye'

a = 

    f1: 'hi'
    f2: 'bye'

>> a=cat(1,a,struct)
Error using cat
Number of fields in structure arrays being concatenated do not match. Concatenation of structure arrays requires that these arrays have the same set of
fields.

能否添加新的空字段元素?

更新

我发现如果同时添加新字段,可以添加新的元素:

>> a=struct()

a = 

struct with no fields.

>> a.f1='hi';
>> a.f2='bye';
>> a(end+1).iamexist=true

a = 

1x2 struct array with fields:

    f1
    f2
    iamexist

令人难以置信的是,没有直截了当的方法!也许有一些类似冒号的结构等效方式吗?


你可以这样做:a(n) = a(1) - Dan
2个回答

5
如果你懒得重新输入字段,或者字段太多,那么这里有一个快捷方式可以获得一个空字段的结构体。
a.f1='hi'
a.f2='bye'

%assuming there is not yet a variable called EmptyStruct
EmptyStruct(2) = a;
EmptyStruct = EmptyStruct(1);

现在EmptyStruct是你想要的空结构体。因此,要添加新的结构体

a(2) = EmptyStruct; %or cat(1, a, EmptyStruct) or [a, EmptyStruct] etc...



a(2)

ans = 

    f1: []
    f2: []

3
您只能将具有相同字段的结构连接起来。
现在我们把您的第二个结构体表示为b。正如您已经检查过的那样,以下操作不起作用,因为结构体a有两个字段,而b没有:
a = struct('f1', 'hi', 'f2', 'bye');
b = struct;
[a; b]

然而,这个可以工作:
a = struct('f1', 'hi', 'f2', 'bye');
b = struct('f1', [], 'f2', []);
[a; b]

如果您想“自动”创建一个与a具有相同字段的空结构(而无需输入所有字段),则可以使用Dan's trick或执行以下操作:
a = struct('f1', 'hi', 'f2', 'bye');

C = reshape(fieldnames(a), 1, []); %// Field names
C(2, :) = {[]};                    %// Empty values
b = struct(C{:});

[a; b]

我建议阅读以下内容:
  1. Stack Overflow - 有哪些有效的方式可以结合两个结构体
  2. Stack Overflow - 通过另一个结构体更新结构体
  3. Loren on the Art of MATLAB - 连接结构体

其中介绍了一些将不同结构体合并成新结构体的方法,以及如何使用一个结构体来更新另一个结构体。请注意,这些链接包含更详细的信息和代码示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接