2013-11-14 61 views
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 

我該怎麼做?

謝謝!

+2

...爲什麼不只是'M = matrix(varargin {:})。(field)'? –

+0

因爲我真的想用'getdata'這個類似的東西:'M = getdata(MyStruct,A,1,:)',如果我用你說的表達式,我只能得到一個值,而不是一個向量。 – baister

回答

2

可以使用getfield功能:

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

或者,如果你想,說,MYSTRUCT(1,1).A(3).B:

M = getfield(MyStruct, {1,1}, 'A', {3},'B'); 
+0

當其中一個索引是':'時失敗。 – baister

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作爲變量的名稱;它也是內置函數的名稱(自然指數函數)。

+0

謝謝。不幸的是,沒有給出的解決方案對我有用。我真正想做的是使用':'作爲索引。 'cellfun'也是無用的,因爲從字符串到單元格的轉換返回NaN。 – baister

相關問題