9

我有一个具有如下结构的元素列表(单元格数组):

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

现在我想过滤 mylist 中的所有 s.text == 'Pickaboo' 或其他一些预定义字符串的结构。在 MATLAB 中实现这一目标的最佳方法是什么?显然这对于​​数组来说很容易,但是对于单元格来说最好的方法是什么?

4

3 回答 3

12

您可以为此使用CELLFUN

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

但是,为什么要制作一个结构单元?如果您的结构都具有相同的字段,则可以创建一个结构数组。要获得点击率,您可以使用ARRAYFUN

于 2010-08-11T19:40:45.140 回答
4

如果元胞数组中的所有结构都具有相同的字段('x''y''s'),那么您可以将其存储mylist为结构数组而不是元胞数组。你可以mylist像这样转换:

mylist = [mylist{:}];

现在,如果您的所有字段's'还包含具有相同字段的结构,您可以以相同的方式将它们全部收集在一起,然后'text'使用STRCMP检查您的字段:

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

在这里,isMatch将是一个逻辑索引向量mylist,其长度与找到匹配项的长度相同,否则为零。

于 2010-08-11T20:07:11.150 回答
2

使用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
于 2010-08-11T19:45:35.703 回答