Suz*_*ioc 5 arrays matlab struct
如何向结构数组添加新元素?我无法与空结构连接:
>> 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.
Run Code Online (Sandbox Code Playgroud)
那么是否可以添加具有空字段的新元素?
更新
我发现如果我同时添加新字段,则可以添加新元素:
>> 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
Run Code Online (Sandbox Code Playgroud)
令人难以置信的是,没有直接的方法!可能有一些冒号等效的结构吗?
如果您懒得再次输入字段或者字段太多,那么这里有一个获取空字段结构的捷径
a.f1='hi'
a.f2='bye'
%assuming there is not yet a variable called EmptyStruct
EmptyStruct(2) = a;
EmptyStruct = EmptyStruct(1);
Run Code Online (Sandbox Code Playgroud)
现在EmptyStruct是您想要的空结构。所以要添加新的
a(2) = EmptyStruct; %or cat(1, a, EmptyStruct) or [a, EmptyStruct] etc...
a(2)
ans =
f1: []
f2: []
Run Code Online (Sandbox Code Playgroud)
您只能连接具有相同字段的结构。
让我们用 表示您的第二个结构b。正如您已经检查过的,以下内容将不起作用,因为 structa有两个字段并且b没有字段:
a = struct('f1', 'hi', 'f2', 'bye');
b = struct;
[a; b]
Run Code Online (Sandbox Code Playgroud)
然而,这有效:
a = struct('f1', 'hi', 'f2', 'bye');
b = struct('f1', [], 'f2', []);
[a; b]
Run Code Online (Sandbox Code Playgroud)
如果您想“自动”创建一个具有相同字段的空结构a(无需输入所有字段),您可以使用Dan 的技巧或执行以下操作:
a = struct('f1', 'hi', 'f2', 'bye');
C = reshape(fieldnames(a), 1, []); %// Field names
C(2, :) = {[]}; %// Empty values
b = struct(C{:});
[a; b]
Run Code Online (Sandbox Code Playgroud)
我还建议阅读以下内容: