2016-03-02 109 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

这是一个好主意! –