Den*_*din 4 matlab struct variable-assignment
假设我有一个S大小为0x1 的结构,且带有字段a和b,向其添加字段的最优雅的方法c是什么?
通常,我能够这样做:
S = struct('a',0,'b',0); %1x1 struct with fields a,b
S.c = 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我收到一个空的结构,它将不再起作用:
S = struct('a',0,'b',0);
S(1) = []; % 0x1 struct with fields a,b
S.c = 0;
% A dot name structure assignment is illegal when the structure is empty.
% Use a subscript on the structure.
Run Code Online (Sandbox Code Playgroud)
我已经想到了两种方法来解决此问题,但是这两种方法都很难看,感觉像是解决方法,而不是解决方案。(请注意,也应正确处理非空结构的可能性)。
我意识到,我关心空结构可能很奇怪,但是不幸的是,如果字段名不存在,则由我管理的部分代码将崩溃。我已经查看了help struct,help subsasgn并且还搜索了给定的错误消息,但是到目前为止,我还没有发现任何提示。因此,非常感谢您的帮助!
您可以deal用来解决此问题:
S = struct('a',0,'b',0);
S(1) = [];
[S(:).c] = deal(0);
Run Code Online (Sandbox Code Playgroud)
这导致
S =
1x0 struct array with fields:
a
b
c
Run Code Online (Sandbox Code Playgroud)
这也适用于非空结构:
S = struct('a',0,'b',0);
[S(:).c] = deal(0);
Run Code Online (Sandbox Code Playgroud)
导致
S =
a: 0
b: 0
c: 0
Run Code Online (Sandbox Code Playgroud)