2015-10-14 134 views
2
fullSeq='ABCDEFG' 
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'} 

我在上面的Inputcell中有2 'ABCDEFG'個字符串。我怎樣才能刪除這兩個字符串?預期結果應該是:在MATLAB中刪除單元格中的字符串

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

回答

8

您可以strcmp一起使用邏輯索引:

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

OutputCell = 

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

耶!

+1

可能要簡單得多。對於這個特定的應用程序,「ismember」可能是矯枉過正的。 +1。 – rayryeng

5

簡單的調用ismember會做的伎倆與邏輯索引組合:

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

我們得到:

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

玩得真好!我想知道'strcmp'和'ismember'之間哪個更快?:) –

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'