将字段添加到空结构

Den*_*din 4 matlab struct variable-assignment

假设我有一个S大小为0x1 的结构,且带有字段ab,向其添加字段的最优雅的方法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)

我已经想到了两种方法来解决此问题,但是这两种方法都很难看,感觉像是解决方法,而不是解决方案。(请注意,也应正确处理非空结构的可能性)。

  1. 向结构中添加一些内容以确保其不为空,添加字段,然后再次使结构为空
  2. 使用所需的字段名初始化新结构,将原始结构中的数据填充其中,然后覆盖原始结构

我意识到,我关心空结构可能很奇怪,但是不幸的是,如果字段名不存在,则由我管理的部分代码将崩溃。我已经查看了help structhelp subsasgn并且还搜索了给定的错误消息,但是到目前为止,我还没有发现任何提示。因此,非常感谢您的帮助!

H.M*_*ter 5

您可以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)

  • 有兴趣的读者可以检查我的后续问题在哪里解决:http://stackoverflow.com/questions/16342688/difference-between-empty-matlab-struct-s-and-all-elements-s (2认同)