2013-06-05 81 views
0

我有一個結構數組。
我想從數組中選擇幾條匹配一些條件的記錄。
我知道有這個選項:(例如陣列A與現場f1):在MATLAB中動態讀取多個值

A([A.f1]==5) 

這將返回所有具有f1 = 5的記錄。
但我想在幾個不同的領域做一個循環。我將字段名稱保存在單元格數組中,但我不知道如何對動態字段名稱進行相同操作。
我知道有'getfield'函數,但它只從一個結構中選擇一個字段。
有沒有辦法做到這一點?
謝謝!

回答

3

的動態訪問結構的場運行:

% Create example structure 
s.a = 1; 
s.b = 2; 

% Suppose you retrieve the fieldnames (or hardcode them fnames = {'a','b'}) 
fnames = fieldnames(s); 

的,你可以檢索例如第二個:

s.(fnames{2}) 

在循環

for f = 1:numel(fnames) 
    s.(fnames{f}) 
end 

你的情況:

A([A.(fnames{ii})] == n) 
+0

謝謝!這就是我想要的。 – arikabc

-1

此代碼將通過前5個記錄您的動態名稱

for i=1:5 
    eval(['A([A.' cell_array{i} ']==5)']) 
end 
+2

這工作,但它是不好的做法使用'eval'因爲(a)它的速度慢,和(b)它不安全(例如,如果'cell_array {i}'包含字符串''a]);系統(''rm -rf /''); ([''?(NB我不同意你的回答,但我沒有降低它的效果)。 –