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 - 从结构中获取单个字段名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ 中的键对值从单个字段中获取重复数据?

从Matlab中的单个文件加载多个函数[重复]

如何将数据结构中的字段保存到 Matlab 中的文件名字段?

如何在模型名称订单的单个字段中由用户获取购物车的所有项目

使用 codeigniter 活动记录获取单个字段输出的值

MATLAB。从结构字段中提取特定数据