fullSeq='ABCDEFG'
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'}
我在上面的'ABCDEFG'
中有2个Inputcell
个字符串。如何删除这2个字符串?预期的输出应为:
Outputcell= {'ABC', 'BDEG','DEFG','CDEG','BCDF'}
答案 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'