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?
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With