使用可变深度的“fieldname-paths”(动态字段名)将结构内容分配到另一个结构中

时间:2013-11-12 23:50:48

标签: matlab structure

简短版本:

假设一个结构B.(SomeFields).field1,其中SomeFields是一堆任何可能长度的字段名:例如SomeFields ='toplevel.middlevel'或SomeFields ='toplevel.middlevel.bottomlevel'。前一种语法实际上在Matlab中不起作用,只适用于1级操作深度,因此只有一个字段名。如何在SomeFields引用时将新字段分配给B.(SomeFields)。 3级操作深度?为了获得现有字段,我使用getfield(B,SomeFields {:}),其中字段是单元格的单元格数组或字符串,包含每个深度级别的所有后续字段,例如:SomeFields = {toplevel middlevel bottomlevel}

长版本:

我在MATLAB中有一个结构,CurrStructSubset,其内容/所有字段名(不是结构本身!)应该添加到另一个结构,OverViewStruct,但是,此结构中字段名的路径,其中CurrStructSubset的内容应该保存到,是可变的。在某些运行时它可以是OverViewStruct.toplevel,在另一次运行时它可能是OverViewStruct.toplevel.secondlevel.thirdlevel.bottomlevel ....以下示例:

这是我的结构我想将另一个结构附加到:

  OverViewStruct =

bankcontact: [1x1 struct]
       food: [1x1 struct]
    sociaal: [1x1 struct]
  transport: [1x1 struct]
vastekosten: [1x1 struct]

这是我要追加的结构:     CurrStructSubset = getfield(OverViewStruct,fields{:}); 随后,特定数量的字段被添加到CurrStructSubset,在这种情况下,只有'cadeau'。

 CurrStructSubset =

           TotalSpent: 20
LogicalSaveMatchesVec: [59x1 logical]
            PercSpent: 0.029814
   NormalizedSpending: 57.542
               cadeau: [1x1 struct]

    with fields{:} = sociaal

我事先不知道CurrStructSubset字段名的名称,因为它们没有修复,字段名的数量也没有。我怎样才能优雅地替换当前的内容。 OverViewStruct.sociaal与CurrStructSubset的内容没有使CurrStructSubset成为一个字段名本身?所以我想要OverViewStruct.sociaal.cadeau而不是OverViewStruct.sociaal.CurrStructSubset.cadeau。请记住,每次调用脚本时,“field”都可以包含任意数量的字段......

setfield(OverViewStruct,fields{:},CurrStructSubset); doesn't seem to do anything

标签:matlab,结构,字段名,动态,字段

0 个答案:

没有答案