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就会显示为

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上的函数编程构造包中实现的-如果您从附加组件资源管理器安装该包,您可以使用它提供的函数而无需自己定义它们,但是如果您与其他人共享代码,则需要记住您的代码具有该依赖项。

为了完整起见,没有任何外部依赖的非常可怕的单行方法是

subsref(fieldnames(TestData), struct('type', '{}', 'subs', {{sb}}))

相关内容

  • 没有找到相关文章

最新更新