MATLAB Answers

0

using strcmp on nested cell array (cell array within a cell array)

Asked by ChiPhi85 on 24 Jan 2019
Latest activity Commented on by ChiPhi85 on 25 Jan 2019
I need to retrieve the index of a string within a cell array where some cells are strings and others are cell arrays of different sizes. For example the first 5 rows might look like this:
{1×2 cell}
{'Text1' }
{1×2 cell}
{'Text2' }
{1×5 cell}
How do I retrieve the row index when the string might be contained with the cell arrays? I'd like to do this without a loop and I'm sure there's a way but I can't figure it out and can't seem to find an answer anywhere. I've tried cellfun which works if I was searching for 'Text1' for example.

  0 Comments

Sign in to comment.

2 Answers

Answer by Guillaume
on 24 Jan 2019
 Accepted Answer

I'm not entirely clear if you want to look inside the inner cell arrays or not.
If not:
lookup = 'something';
rows = find(cellfun(@(c) ischar(c) && strcmp(c, lookup), yourcellarray)) %the && is essential to ensure that strcmp is only called when the content of the cell is a char vector
If you want to look insie the inner cell arrays and only care about knowing which rows of the outer cell array may contain your search:
lookup = 'something';
rows = find(cellfun(@(c) any(strcmp(c, lookup)), yourcellarray))
Note that this assumes that the inner cells all contain char vectors.

  1 Comment

I did want to look inside the cell arrays and I was missing the any function - thanks

Sign in to comment.


Answer by Kevin Phung on 24 Jan 2019
Edited by Kevin Phung on 24 Jan 2019

if a is your cell array:
myText ='Text1';
idx = find(cellfun(@ischar,a)) %returns those indices where cell is a chr array
idx = idx(find(strcmp(a(cellfun(@ischar,a)),myText)))

  0 Comments

Sign in to comment.