Поиск и фильтрация элементов в массиве ячеек MATLAB

У меня есть список (массив ячеек) элементов с такими структурами:

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

Теперь я хотел бы отфильтровать mylist для всех структур, из которых .text == 'Pickaboo' или другая предопределенная строка. Каков наилучший способ добиться этого в MATLAB? Очевидно, это легко для массивов, но как лучше всего это сделать для ячеек?

9
задан Nigel Davies 27 January 2014 в 11:18
поделиться

3 ответа

Для этого можно использовать CELLFUN .

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

Но почему вы делаете ячейку из структур? Если все ваши структуры имеют одинаковые поля, вы можете создать массив структур. Для получения обращений используйте ARRAYFUN .

12
ответ дан 4 December 2019 в 11:39
поделиться

Если все ваши структуры в массиве ячеек имеют одинаковые поля ( 'x' , 'y' и 's '), то вы можете сохранить mylist как массив структур вместо массива ячеек. Вы можете преобразовать mylist следующим образом:

mylist = [mylist{:}];

Теперь, если все ваши поля 's' также содержат структуры с одинаковыми полями, вы можете собрать их все вместе в одном затем проверьте свое поле 'текст' , используя STRCMP :

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

Здесь isMatch будет вектором логического индекса то же самое длина как mylist с единицами, в которых найдено совпадение, и нулями в противном случае.

4
ответ дан 4 December 2019 в 11:39
поделиться

Используйте 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
2
ответ дан 4 December 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: