在MATLAB中删除单元格数组中的字符串

时间:2015-10-14 17:42:37

标签: matlab cell-array

fullSeq='ABCDEFG'
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'}

我在上面的'ABCDEFG'中有2个Inputcell个字符串。如何删除这2个字符串?预期的输出应为:

Outputcell= {'ABC', 'BDEG','DEFG','CDEG','BCDF'}

3 个答案:

答案 0 :(得分:8)

您可以使用逻辑索引以及strcmp

OutputCell = Inputcell(~strcmp(Inputcell,fullSeq))

OutputCell = 

    'ABC'    'BDEG'    'DEFG'    'CDEG'    'BCDF'

耶!

答案 1 :(得分:5)

ismember的简单调用将结合逻辑索引进行处理:

fullSeq='ABCDEFG';
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'};
Outputcell = Inputcell(~ismember(Inputcell, fullSeq));

我们得到:

>> Outputcell
Outputcell = 
    'ABC'    'BDEG'    'DEFG'    'CDEG'    'BCDF'

答案 2 :(得分:3)

如果由于某种原因你想要自动删除至少出现两次的每个元素(而不是必须使用fullSeq的各种值运行上述答案),你可以这样做太:

iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}(); %define inline 'if'
Inputcell={'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'};
Tempcell=cellfun(@(x)iif(sum(strcmp(x,Inputcell))>1,[],true,x),Inputcell,...
                 'uniformoutput',false);
Outputcell=Tempcell(~cellfun('isempty',Tempcell))

结果:

Outputcell = 

    'ABC'    'BDEG'    'DEFG'    'CDEG'    'BCDF'