我希望通过代码从结构数组中获取值,并且我将索引存储在字符串中。
我试过运行此代码:
function M = getdata(matrix,field,varargin)
exp = [];
for i = 1:nargin-3
exp = [exp num2str(varargin{i}) ','];
end
exp = [exp num2str(varargin{nargin-2})];
M = eval('matrix(exp).(Field)');
end
然而,它失败了。
例如,假设我有一个包含2个字段A和B的结构数组。所以,我可以编写
MyStruct(1,1).A
可能的用途是:
M = getdata(MyStruct,A,1,1)
我希望程序能够:
M = MyStruct(1,1).A
我怎么能这样做?
谢谢!
答案 0 :(得分:2)
您可以使用getfield
功能:
M = getfield(MyStruct, {1,1} ,'A');
或者,如果你想要,比如,MyStruct(1,1).A(3).B:
M = getfield(MyStruct, {1,1}, 'A', {3},'B');
答案 1 :(得分:1)
对于你给出的例子,这就足够了:
function M = getdata(matrix,field,varargin)
M = matrix(varargin{:}).(field);
你称之为
getdata(myStruct, 'A', 1,1)
这使得该功能相当无用。
但是,一般来说,当你将索引作为字符串给出时,你可以遵循大致相同的方法:
%// Your indices
str = {'1', '2'};
%// convert to numbers
str = cellfun(@str2double, str, 'UniformOutput', false);
%// use them as indices into structure
M = myStruct(str{:}).(field)
如果您真的坚持,那么您对eval
的来电是错误的:
M = eval(['matrix(' exp ').(' field ')']);
并且,作为一般性评论,请不要使用exp
作为变量的名称;它也是内置函数的名称(自然指数函数)。