【问题标题】:structures within structures in matlabmatlab中结构内的结构
【发布时间】:2018-12-10 23:27:11
【问题描述】:
s(1) = struct('a', 2, 'b', 3)
s(1).c(1) = struct('x',4, 'y',5);
s(1).c(2) = struct('x',6, 'y',7);
s(1).c(3) = struct('x',8, 'y',9);

我尝试这个时遇到错误

s(2) = struct('a', 10, 'b', 11)

Subscripted assignment between dissimilar structures.

我正在寻找一种在创建s(1) 时直接创建c(1)c(2)c(3) 子字段的方法,有没有办法做到这一点?

【问题讨论】:

    标签: matlab data-structures struct


    【解决方案1】:

    您可以使用c(1)c(2)c(3) 创建结构,如下所示,

    s(1) = struct('a', 2, 'b', 3, 'c', [struct('x', 4, 'y', 5) struct('x', 6, 'y', 7) struct('x', 8, 'y', 9)])
    

    如果您创建 s(2),则字段需要与 s(1) 中的字段匹配。但是,如果需要,您可以将 s(2) 中的 c 留空。

    s(2) = struct('a', 10, 'b', 11, 'c', struct)
    

    【讨论】:

      【解决方案2】:

      您可以使用索引扩展结构数组,而无需分配每个字段,如下所示:

      s(2).a = 10;
      s(2).b = 11;
      

      在这种情况下,c 字段保持为空(即[])。字段不需要具有相同的类型,如果s(1).c 是一个结构,那么s(2).c 可以是一个数组或一个字符串或任何你想要的。

      使用deal,您可以将其变为单行:

      [ s(2).a , s(2).b ] = deal( 10 , 11 );
      

      要一次性创建结构体s(1).c 的所有元素,您可以对struct 使用以下语法:

      s(1).c = struct('x',{4,6,8}, 'y',{5,7,9});
      

      这里的数据字段是一个元胞数组,其中元胞数组的每个元素都在其中一个结构数组元素中指定该字段的值。

      当然你可以将整个c(1)的创建合并到一个命令中:

      s(1) = struct('a', 2, 'b', 3, 'c', struct('x',{4,6,8}, 'y',{5,7,9}));
      

      以类似的方式,您可以一次性创建s(1)s(2)

      s = struct('a', {2,10}, 'b', {3,11}, 'c', {struct('x',{4,6,8}, 'y',{5,7,9}),[]});
      

      ...但是用一行代码编写变得越来越麻烦。使用省略号使其更具可读性:

      s = struct('a',{ 2,                                10 }, ...
                 'b',{ 3,                                11 }, ...
                 'c',{ struct('x',{4,6,8}, 'y',{5,7,9}), [] });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多