Search code examples
matlabindexingcell-array

How do I find a specific cell within a cell array?


Let's say I have a cell array containing 1x2 cells. eg. deck = {{4,'c'},{6,'s'}...{13,'c'}...{6,'d'}}

How can I find the index of a specific cell? E.g I want to find the index of the cell with the values {13,'c'}.

Thanks!


Solution

  • Another method I can suggest is to operate on each column separately. We could use logical operators on each column to search for cards in your cell array that contain a specific number in the first column, followed by a specific suit in the second column. To denote a match, we would check to see where these two outputs intersect. We can do this by combining both outputs with a logical AND when we're done:

    deck = {{4,'c'},{6,'s'},{13,'c'},{6,'d'}};
    target_card = {13, 'c'};
    
    deck_unroll = vertcat(deck{:});    
    a1 = cat(1, deck_unroll{:,1}) == target_card{1};
    a2 = cat(1, deck_unroll{:,2}) == target_card{2};
    found = a1 & a2  
    
    found =
    
         0
         0
         1
         0
    

    Because deck is a nested cell array, I unrolled it so that it becomes a 2D cell array where each row denotes one card. This is stored in deck_unroll. Once I do this, I further unroll the cells so that the first column gets placed into a numeric array and we search for a particular number (13 in your example) and the second column gets placed into a string array where we search for a particular character ('c' in your example). This is done with the help of cat to extract each element from a particular column and we construct an array out of these elements.