我对访问可能埋藏在包含结构深处的任意数量的级别的字段的一般问题感兴趣。下面是使用两个级别的具体示例。
说我有一个结构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 内置函数直接获取字段值。
对于您的示例,您必须将动态字段访问分为两个步骤,例如:
>> field1 = 'midlevel';
>> field2 = 'bottomlevel';
>> value = toplevel.(field1).(field2)
value =
foo
但是,有一种方法可以将此解决方案推广到具有任意数量的由句点分隔的子字段的字符串。您可以使用该功能TEXTSCAN http://www.mathworks.com/help/techdoc/ref/textscan.html从字符串和函数中提取字段名称GETFIELD http://www.mathworks.com/help/techdoc/ref/getfield.html一步执行递归字段访问:
>> fieldnameToAccess = 'midlevel.bottomlevel';
>> fields = textscan(fieldnameToAccess,'%s','Delimiter','.');
>> value = getfield(toplevel,fields{1}{:})
value =
foo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)