1

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

谢谢。

4

1 回答 1

1

文档中所述,您可以添加选项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))

重复

If they're duplicates in A, intersect will only find them once. ismember might be better suited if you want to find all of the duplicates:

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
于 2013-08-09T06:41:59.697 回答