MATLAB:基于 strfind 的结果在元胞数组中建立子索引

MATLAB: Subindexing in cell array based on results of strfind

我有一个元胞数组,像这样:

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

我也有一些对应这些ID的数据。

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

假设我当前的 ID 是 g283,我想提取与此 ID 匹配的数据。

我做了 strfind(ID, 'g283') 并得到了这样的结果:

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

我现在想从数据中提取数据并得到这个:

new_data = ['data1', 'datat4'] 或同等学历。

但是,无法对元胞数组进行子索引,所以我想知道是否有一种无需循环即可执行此操作的简单方法。谢谢!

让输入变量定义为

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

您只需要申请isempty to test if each result of strfind contains a match or not. This can be done via cellfun,例如如下:

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

如果您要查找整个字符串(而不是部分匹配),更简单的替代方法是使用 ismember:

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