精简版:
假设结构 B.(SomeFields).field1 中的 SomeFields 是一组任意长度的字段名:例如 SomeFields = 'toplevel.middlevel' 或 SomeFields = 'toplevel.middlevel.bottomlevel'。前一种语法在 Matlab 中实际上不起作用,仅适用于 1 级操作深度,因此只有一个字段名。当 SomeFields 指的是例如 3 级操作深度时,如何为 B.(SomeFields) 分配一个新字段?要获取现有字段,我使用 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 的字段名称的名称,因为它们不是固定的,字段名称的数量也不是。如何在不使 CurrStructSubset 本身成为字段名的情况下,优雅地用 CurrStructSubset 的内容替换例如 OverViewStruct.social 的当前内容?所以我想要 OverViewStruct.social.cadeau 而不是 OverViewStruct.social.CurrStructSubset.cadeau。请记住,每次调用脚本时,“字段”都可以包含任意数量的字段 ... 。
setfield(OverViewStruct,fields{:},CurrStructSubset); doesn't seem to do anything
标签: matlab, 结构体, 字段名, 动态, setfield