Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding and filtering elements in a MATLAB cell array

I have a list (cell array) of elements with structs like this:

mystruct = struct('x', 'foo', 'y', 'bar', 's', struct('text', 'Pickabo'));
mylist = {mystruct <more similar struct elements here>};

Now I would like to filter mylist for all structs from which s.text == 'Pickaboo' or some other predefined string. What is the best way to achieve this in MATLAB? Obviously this is easy for arrays, but what is the best way to do this for cells?

like image 750
smichak Avatar asked Aug 11 '10 19:08

smichak


2 Answers

You can use CELLFUN for this.

hits = cellfun(@(x)strcmp(x.s.text,'Pickabo'),mylist);
filteredList = mylist(hits);

However, why do you make a cell of structs? If your structs all have the same fields, you can make an array of structs. To get the hits, you'd then use ARRAYFUN.

like image 141
Jonas Avatar answered Sep 22 '22 13:09

Jonas


If all of your structures in your cell array have the same fields ('x', 'y', and 's') then you can store mylist as a structure array instead of a cell array. You can convert mylist like so:

mylist = [mylist{:}];

Now, if all your fields 's' also contain structures with the same fields in them, you can collect them all together in the same way, then check your field 'text' using STRCMP:

s = [mylist.s];
isMatch = strcmp({s.text},'Pickabo');

Here, isMatch will be a logical index vector the same length as mylist with ones where a match is found and zeroes otherwise.

like image 43
gnovice Avatar answered Sep 21 '22 13:09

gnovice