ref=69;A={[1,2,3,12],[19,34,37,15,33,35,36],[19,20,21,22,23,5,8,11,13,15,17],[37,38,65,40,42,49,66],[5,11,3,12],[69,19,21,22,23],[69,70,75]};amount=[];ref_include_index = cellfun(@(v)any(ismember(v,ref)),A); ref_include_array = A(ref_include_index); % find array that include ref
amount=[ref_include_array{:},amount];amount=unique(amount);idv = cellfun(@(v)any(ismember(v,amount)),A);idvv=A(idv&~ref_include_index); amount=[idvv{:},amount];amount=unique(amount);idr = cellfun(@(v)any(ismember(v,amount)),A);idrr=A(idr&~idv&~ref_include_index);amount=[idrr{:},amount];amount=unique(amount);idm = cellfun(@(v)any(ismember(v,amount)),A);idmm=A(idm&~idr&~idv&~ref_include_index);amount=[idmm{:},amount];amount=unique(amount);result=[ref_include_array,idvv,idrr,idmm];
this code sorting A according to ref. if size of A is changing I have to copy and paste this line
idm = cellfun(@(v)any(ismember(v,amount)),A);idmm=A(idm&~idr&~idv&~ref_include_index);amount=[idmm{:},amount];amount=unique(amount);
Is there any way to write better code for this?
Best Answer