2

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

我试图运行这段代码:

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

我怎么能那样做?

谢谢!

4

2 回答 2

2

您可以使用以下getfield功能:

M = getfield(MyStruct, {1,1} ,'A');

或者,如果您想要 MyStruct(1,1).A(3).B:

M = getfield(MyStruct, {1,1}, 'A', {3},'B');
于 2013-11-14T14:34:47.977 回答
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用作变量的名称;它也是一个内置函数(自然指数函数)的名称。

于 2013-11-14T14:34:56.803 回答