Matlab,相交结果的字母顺序

时间:2013-08-09 06:32:04

标签: string matlab cell intersect

我使用交叉函数来查找两个单元格数组A和B中的公共字符串([〜,idx] = intersect(A,B))并保存 idx中的索引。然后我用A(idx)提取公共字符串。我看到结果按字母顺序排序。我想在A中排序它们,为什么这些字符串按字母顺序排序?

感谢。

1 个答案:

答案 0 :(得分:1)

正如documentation中所述,您可以添加选项setOrder='stable'以保留元素的顺序:

[C,ia,ib] = intersect(A,B,'stable');

您甚至不必捕获索引(除非在别处使用),如示例所示:

  

C = intersect([7 0 5],[7 1 5],'stable')
  返回
  C = [7 5]

A='hgfedcba';
B='hac';
[~,ia]=intersect(A,B,'stable');
ia'

>   1   6   8

A(ia)

>   hca

对于Matlab R2011b及更早版本:

如果你的matlab版本不支持'stable'选项,你可以在索引上使用sort

[~,ia]=intersect(A,B);
ia=sort(ia);
A(ia)

>   1   6   8

A(sort(ia))

重复

如果它们在A中重复,则相交只会找到一次。如果您想要找到所有重复项,ismember可能更适合:

A='hhggffeeddccbbaa';
B='hac';
[~,ia]=intersect(A,B);
ia=sort(ia);
A(ia)

>   hca

[~,loc] = ismember(A,B);
ia=find(loc~=0); % because you want the indices (logical indexing is also an option of course)
A(ia)

>   hhccaa