MATLAB - 从结构中获取单个字段名称[重复]
Posted
技术标签:
【中文标题】MATLAB - 从结构中获取单个字段名称[重复]【英文标题】:MATLAB - Get single field name from struct [duplicate] 【发布时间】:2021-04-30 09:10:39 【问题描述】:我的问题是,您能否在一个函数中提取 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 = conditionsb
所以条件会出现
condition =
Name3
我想知道是否可以通过这样的方式做更多的事情
condition = fieldnames(TestDatasb);
不是一个需要解决的基本问题,但最好让代码更优雅一些
【问题讨论】:
obj.Model.TestData2
是什么?
它是一个 1x1 结构,包含 8 个 37295x1 双数组,我想要做的就是提取一个数组的名称,而无需分两行完成
请发布一个定义所有变量的最小示例,以便我们运行您的代码。当你这样做时让我知道,这样我就可以删除我的反对票
抱歉,我在这里提供了一个简化的例子 TestData.Name1 = [1 2 3]; TestData.Name2 = [4 5 6]; TestData.Name3 = [7 8 9]; TestData.Name4 = [10 11 12];某人= 3;条件 = 字段名(TestData)条件 = 条件sb
我现在知道你想做什么了。我想不出任何简单的方法可以根据需要直接索引。您可以将subsref
用作here,但这是一团糟。另外,您是否知道字段的顺序是创建顺序,因此可能不可靠?我的意思是,例如尝试test1.a = 10; test1.b = 20; test2.b = 20; test2.a = 10; fieldnames(test1), fieldnames(test2)
【参考方案1】:
如果您不介意在代码中的某处定义辅助函数 - 您可以将其作为单行匿名函数赋值来执行 - 那么您可以这样做:
curly = @(cellArray, index) cellArrayindex;
或
function item = curly(cellArray, index)
item = cellArrayindex;
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))
【讨论】:
鉴于我使用的代码需要与其他用户共享,这可能不是最佳解决方案,但我会研究一下 如果您不想要依赖,但又想在一个文件中多次使用该语法,您可以将其定义为本地或嵌套函数(或私有类方法)。这取决于您是使用笨拙但标准的多行语法更好,还是让阅读您的代码的人需要检查curly
的作用。 (我称它为curly
,因为文件交换包就是这么称呼它的,但如果你想清楚的话,你可以称它为selectItemFromCellArray
。)
老实说,我认为condition = fieldnames(TestData); condition = conditionsb;
比您发布的两个中的任何一个都更好。 :) 还是不错的提议。 +1
另外,看看substruct
,它使subsref
调用变得简单了很多。以上是关于MATLAB - 从结构中获取单个字段名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章