首页 > 解决方案 > 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});

不是要解决的基本问题,但最好使代码更优雅一些

标签: matlaboopstruct

解决方案


如果您不介意在代码中的某处定义辅助函数 - 您可以将其作为单行匿名函数赋值来执行 - 那么您可以这样做:

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}}))

推荐阅读