arraysstringmatlabcell-array

MATLAB: Subindexing in cell array based on results of strfind


I have a cell array, like so:

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

I also have some data that corresponds to these IDs.

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

Let's say my current ID is g283, and I want to extract Data that matches this ID.

I do strfind(ID, 'g283') and get a result like so:

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

I now want to extract the data from data and get this:

new_data = ['data1', 'datat4'] or equivalent.

However, cell arrays cannot be subindexed into, so I am wondering if there is an easy method to do this without looping. Thank you!


Solution

  • Let the input variables be defined as

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

    You only need to apply isempty to test if each result of strfind contains a match or not. This can be done via cellfun, for example as follows:

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

    If you are looking for the whole string (as opposed to a partial match), a simpler alternative is to use ismember:

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