2017-07-19 70 views
0

的結果我有一個單元陣列,像這樣:MATLAB:Subindexing在單元陣列基於strfind

ID = {'g283', 'sah378', '2938349dgdgf', 'g283'}; 

我還具有對應於這些ID一些數據。

Data = {'data1', 'data2', 'data3', 'data4'}; 

假設我目前的ID是g283,並且我想提取與此ID匹配的數據。

我做strfind(ID, 'g283'),並得到像這樣的結果:

result = {[1], [], [], [1]} 

我現在想從數據中提取數據,並得到這個:

NEW_DATA = [ '數據1', 'datat4']或當量。

但是,單元格數組不能被subindexed到,所以我想知道是否有一個簡單的方法來做到這一點沒有循環。謝謝!

回答

1

讓輸入變量定義爲

ID = {'g283', 'sah378', '2938349dgdgf', 'g283'}; % ID 
Data = {'data1', 'data2', 'data3', 'data4'}; % data 
s = 'g283'; % current ID 

你只需要申請isempty來測試的strfind每個結果包含匹配與否。這可以通過cellfun來完成,舉例如下:

ind = cellfun(@(x) ~isempty(strfind(x, s)), ID); 
new_data = Data(ind); 

如果你正在尋找的整個字符串(如並列爲部分匹配),一個簡單的替代方法是使用ismember

ind = ismember(ID, s); 
new_data = Data(ind);