Поиск и фильтрация элементов в массиве ячеек MATLAB
У меня есть список (массив ячеек) элементов структуры такой:
mystruct = struct('x', 'foo', 'y', 'bar', 's', struct('text', 'Pickabo'));
mylist = {mystruct <more similar struct elements here>};
теперь я хотел бы фильтровать mylist для всех структур, из которых s.text = = 'Pickaboo' или другая предопределенная строка. Каков наилучший способ достичь этого в MATLAB? Очевидно, что это легко для массивов, но каков наилучший способ сделать это для ячеек?
3 ответов
если все ваши структуры в массив ячеек имеют одинаковые поля ('x'
, 'y'
и 's'
), то вы можете магазине mylist
как массив структуры вместо массива ячеек. Вы можете конвертировать mylist
вот так:
mylist = [mylist{:}];
теперь, если все ваши поля 's'
также содержат структуры с одинаковыми полями в них, вы можете собрать их все вместе таким же образом, а затем проверить свое поле 'text'
используя чего strcmp:
s = [mylist.s];
isMatch = strcmp({s.text},'Pickabo');
здесь isMatch
будет будь вектор логического индекса такой же длины, как mylist
С, где найдено совпадение и нули в противном случае.
использовать cellfun
.
mystruct = struct('x', 'foo', 'y', 'bar', 's', struct('text', 'Pickabo'));
mystruct1 = struct('x', 'foo1', 'y', 'bar1', 's', struct('text', 'Pickabo'));
mystruct2 = struct('x', 'foo2', 'y', 'bar2', 's', struct('text', 'Pickabo1'));
mylist = {mystruct, mystruct1, mystruct2 };
string_of_interest = 'Pickabo'; %# define your string of interest here
mylist_index_of_interest = cellfun(@(x) strcmp(x.s.text,string_of_interest), mylist ); %# find the indices of the struct of interest
mylist_of_interest = mylist( mylist_index_of_interest ); %# create a new list containing only the the structs of interest