Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中动态访问结构的字段的字段?

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

假设我有一个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函数从字符串中提取字段名称,并使用GETFIELD函数来一步执行递归字段访问:

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

更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:24


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.