索引存储在字符串中的访问结构数组

时间:2013-11-14 14:17:01

标签: arrays matlab data-structures

我希望通过代码从结构数组中获取值,并且我将索引存储在字符串中。

我试过运行此代码:

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

我怎么能这样做?

谢谢!

2 个答案:

答案 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作为变量的名称;它也是内置函数的名称(自然指数函数)。