6

我对访问一个字段的一般问题感兴趣,该字段可能被埋在包含结构中任意多个级别的深处。下面是使用两个级别的具体示例。

假设我有一个结构体toplevel,我在 MATLAB 命令行中使用以下内容定义它:

midlevel.bottomlevel = 'foo';
toplevel.midlevel = midlevel;

我可以midlevel通过将字段名称作为字符串传递来访问结构,例如:

fieldnameToAccess = 'midlevel';
value = toplevel.(fieldnameToAccess);

但我无法bottomlevel以相同的方式访问该结构——以下语法无效:

fieldnameToAccess = 'midlevel.bottomlevel';
value = toplevel.(fieldnameToAccess); %# throws ??? Reference to non-existent field 'midlevel.bottomlevel'

我可以编写一个函数来查找fieldnameToAccess句点,然后递归迭代以获得所需的字段,但我想知道是否有一些聪明的方法可以使用 MATLAB 内置函数直接获取字段值。

4

1 回答 1

11

对于您的示例,您必须将动态字段访问分为两个步骤,例如:

>> field1 = 'midlevel';
>> field2 = 'bottomlevel';
>> value = toplevel.(field1).(field2)

value =

foo

但是,有一种方法可以将此解决方案推广到具有任意数量的由句点分隔的子字段的字符串。您可以使用函数TEXTSCAN从字符串中提取字段名称,并使用函数GETFIELD 一步执行递归字段访问:

>> fieldnameToAccess = 'midlevel.bottomlevel';
>> fields = textscan(fieldnameToAccess,'%s','Delimiter','.');
>> value = getfield(toplevel,fields{1}{:})

value =

foo
于 2010-09-20T17:14:19.510 回答