2016-03-02 83 views
-1

我有兩個單元陣列的單元陣列,排序根據另一單元陣列

reference = [{'A'}, {'B'}, {'H'}, {'D'}, {'G'}]; 
array2 = [{'A'}, {'G'}, {'H'}, {'B'}, {'D'}]; 

是否有MATLAB任何智能方式來排序數組2,相對於所述單元陣列的參考;

該函數應該返回array2的索引,其順序與「reference」的順序相同(array2將與參考相同)。

爲如

magic_order = function(array2, reference) 
.... 
end 

magic_order(數組2,參考)將返回

1,4,3,5,2 

,現在,如果我做

array2(1,4,3,5,2) 

我會得到相同的參考

排序功能

reference = [{'A'}, {'B'}, {'H'}, {'D'}, {'G'}]; 
array2 = [{'A'}, {'G'}, {'H'}, {'B'}, {'D'}]; 
[a, b] = sort(reference) 
isequal(reference, array2(b)) 
ans = 0 
+2

標題說的比賽,問題說的排序。這是什麼? – excaza

+0

對不起 - 我沒想到,措辭會讓人混淆。基本上,無論您提出什麼建議,都會使(排列)array2,與參考相同。 – user702846

+0

這並沒有說明。請提供您期望的輸出示例。如上所述,顯而易見的答案是'array2 = reference' – excaza

回答

3

ismember的第二個輸出也可能有用。

reference = [{'A'}, {'B'}, {'H'}, {'D'}, {'G'}]; 
array2 = [{'A'}, {'G'}, {'H'}, {'B'}, {'D'}]; 
[~, pos] = ismember(reference,array2); 

結果:

>> isequal(array2(pos),reference) 

ans = 

    1 
4

使用intersect

reference = [{'A'}, {'B'}, {'H'}, {'D'}, {'G'}]; 
array2 = [{'A'}, {'G'}, {'H'}, {'B'}, {'D'}]; 

[~, ~, idx] = intersect(reference, array2, 'stable'); 

將返回:

>> isequal(reference, array2(idx)) 

ans = 

    1 

的使用setOrder='stable'intersect(我已經忽略不計)的第一輸出,返回共同的價值觀referencearray2的順序與相同。第三個輸出是第一個輸出中的array2索引。假設單元陣列相等,這將是referencearray2的索引。

+0

這是一個好主意! –