2016-08-10 11 views
-4

Ich habe zwei Array wie folgt.spezielle Sortierung von zwei Array in Matlab mit Vergleich

BLoc1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I', 'K', 'L', 'M'] 
BLoc2 = ['A', 'D', 'E', 'F', 'G', 'I', 'J', 'K', 'L'] 

und ich möchte Ausgabe wie folgt.

BLoc1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I', 'NA', 'K', 'L', 'M'] 
BLoc2 = ['A', 'NA', 'NA', 'D', 'E', 'F', 'G', 'I', 'J', 'K', 'L','NA'] 
+0

So wollen Sie schreiben ' 'NA'', wenn der Buchstabe des Alphabets fehlt? Welches Sprachenalphabet? Wie lange? Das Alphabet endet nicht bei "M". Warum nur zu M? –

+0

Können Sie erklären, was Sie zu tun versuchen? Was hast du versucht? – goto

+0

Beachten Sie auch, dass 'BLoc2 = ['A', 'D']' 'AD' ist, also' BLoc2 (2) 'wird' D' sein, aber wenn 'BLoc2 = ['NA', 'D'] 'dann' BLoc2 (2) = A' –

Antwort

1

Das Ergebnis Sie versuchen, ist möglich, zu erreichen, nur mit Zellen-Arrays, da sonst 'NA' würde als 'N' 'A' das heißt beide Alphabete auf verschiedenen Indizes in Betracht gezogen werden. Wie dem auch sei

, finden Sie den Code, der Ihnen helfen zu entscheiden: -

BLoc1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'I', 'K', 'L', 'M']; 
BLoc2 = ['A', 'D', 'E', 'F', 'G', 'I', 'J', 'K', 'L']; 

%Converting to cell arrays 
BLoc1=num2cell(BLoc1,size(BLoc1,2)); 
BLoc2=num2cell(BLoc2,size(BLoc2,2)); 

%Union of the two 
complete=union(BLoc1,BLoc2); 

NewBLoc1=complete; 
[~,idx]=ismember(complete,BLoc1); 
idx = find(idx==0);   %finding the indexes where BLoc1 has missing elements 
[NewBLoc1{idx}]=deal('NA') %filling the elements at missing indexes with 'Na' 

%Similarly for BLoc2 
NewBLoc2=complete; 
[~,idx]=ismember(complete,BLoc2); 
idx = find(idx==0); 
[NewBLoc2{idx}]=deal('NA') 

%converting back to simple matrix since that's your requirement in the question 
%but I recommend you to also run the code atleast once without the next two lines too. 
NewBLoc1= cell2mat(NewBLoc1) 
NewBLoc2= cell2mat(NewBLoc2) 
+0

Vielen Dank ... Es ist genau das, was ich will ... – dmvachhani

-1

prüfen dies:

clc 
clear 

A = [{'a'} {'c'} {'d'} {'w'} {'e'} {'t'}]; 
B = [{'e'} {'b'} {'e'} {'d'} {'z'} {'s'} {'x'}]; 

A = sort(A); 
B = sort(B); 

i = 1; 
while ~(i > length(A) || i > length(B)) 
    if isequal(A(i), B(i)) || isequal(A{i}, 'NA') || isequal(B{i}, 'NA') 
     i = i + 1; 
     continue; 
    end 

    if A{i} > B{i} 
     A = [A(1:i-1) {'NA'} A(i:end)]; 
    else 
     B = [B(1:i-1) {'NA'} B(i:end)]; 
    end 
end 

n = length(A) - length(B); 
A = [A repmat({'NA'}, [1, -n])]; 
B = [B repmat({'NA'}, [1, n])]; 

disp(A) 
disp(B)