我有一個結構數組。
我想從數組中選擇幾條匹配一些條件的記錄。
我知道有這個選項:(例如陣列A
與現場f1
):在MATLAB中動態讀取多個值
A([A.f1]==5)
這將返回所有具有f1 = 5
的記錄。
但我想在幾個不同的領域做一個循環。我將字段名稱保存在單元格數組中,但我不知道如何對動態字段名稱進行相同操作。
我知道有'getfield'函數,但它只從一個結構中選擇一個字段。
有沒有辦法做到這一點?
謝謝!
我有一個結構數組。
我想從數組中選擇幾條匹配一些條件的記錄。
我知道有這個選項:(例如陣列A
與現場f1
):在MATLAB中動態讀取多個值
A([A.f1]==5)
這將返回所有具有f1 = 5
的記錄。
但我想在幾個不同的領域做一個循環。我將字段名稱保存在單元格數組中,但我不知道如何對動態字段名稱進行相同操作。
我知道有'getfield'函數,但它只從一個結構中選擇一個字段。
有沒有辦法做到這一點?
謝謝!
的動態訪問結構的場運行:
% 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)
此代碼將通過前5個記錄您的動態名稱
for i=1:5
eval(['A([A.' cell_array{i} ']==5)'])
end
這工作,但它是不好的做法使用'eval'因爲(a)它的速度慢,和(b)它不安全(例如,如果'cell_array {i}'包含字符串''a]);系統(''rm -rf /''); ([''?(NB我不同意你的回答,但我沒有降低它的效果)。 –
謝謝!這就是我想要的。 – arikabc