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

令人难以置信的是没有直接的方法!结构可能有一些等效的冒号吗?

4

2 回答 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: []
于 2013-07-23T08:55:12.800 回答
3

您只能连接具有相同字段的结构。

让我们用 来表示你的第二个结构b。正如您已经检查过的那样,以下内容将不起作用,因为 structa有两个字段并且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 的技巧或执行以下操作:

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 谈 MATLAB 的艺术 - 连接结构
于 2013-07-23T08:51:06.663 回答