我的问题是,你能在一个函数中,在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}}))