matlab - MATLAB - 从结构中获取单个字段名称
问题描述
我的问题是,您能否在一个函数中提取 MATLAB 中结构的一个字段名称。目前我正在这样做
sb = 3;
TestData.Name1 = [1 2 3];
TestData.Name2 = [4 5 6];
TestData.Name3 = [7 8 9];
TestData.Name4 = [10 11 12];
condition = fieldnames(TestData);
condition = condition{sb}
所以条件会出现
condition =
Name3
我想知道它是否可以以这样的方式完成更多
condition = fieldnames(TestData{sb});
不是要解决的基本问题,但最好使代码更优雅一些
解决方案
如果您不介意在代码中的某处定义辅助函数 - 您可以将其作为单行匿名函数赋值来执行 - 那么您可以这样做:
curly = @(cellArray, index) cellArray{index};
或者
function item = curly(cellArray, index)
item = cellArray{index};
end
然后
>> curly({'foo', 'bar', 'bas'}, 2)
ans =
'bar'
>> curly(fieldnames(TestData), sb)
ans =
'Name3'
这是在 MATLAB File Exchange 上的Functional Programming Constructs包中实现的 - 如果您从 Add-on Explorer 安装该包,您可以使用它提供的函数而无需自己定义它们,但是您需要记住您的代码具有如果您与他人共享代码,则依赖。
只是为了完整性,没有任何外部依赖的完全可怕的单行方法是
subsref(fieldnames(TestData), struct('type', '{}', 'subs', {{sb}}))
推荐阅读
- python - 找不到页面 (404) 使用 project.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:
- .net - WPF 使用绑定的结果作为 XAML 中的输入字符串
- javascript - 从命令行以编程方式删除 ios 上的应用程序数据
- angularjs - Angularjs中子指令的动态设置属性
- javascript - NextJS .prepare() 实际上做了什么?
- grails - Groovy 变量双重替换
- javascript - 是否可以在 Chrome 网络检查器网络选项卡中隐藏请求 URL?
- sql - 如何知道何时创建复合约束?
- java - 加密 Neo4j 关系
- haskell - 如何使用 stack/hpack 定义多个可执行文件/主模块