我有一个单元格数组,如下所示:
ID = {'g283', 'sah378', '2938349dgdgf', 'g283'};
我也有一些与这些ID相对应的数据。
Data = {'data1', 'data2', 'data3', 'data4'};
假设我当前的ID是g283,我想提取与此ID匹配的数据。
我做strfind(ID, 'g283')
并得到如此结果:
result = {[1], [], [], [1]}
我现在想从数据中提取数据并得到这个:
new_data = ['data1','datat4']或同等的。
但是,单元格数组不能被子索引,所以我想知道是否有一个简单的方法可以在没有循环的情况下执行此操作。谢谢!
答案 0 :(得分: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);