简短版本:
假设一个结构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,结构,字段名,动态,字段