我使用intersect 函数在两个单元格数组 A 和 B ([~,idx]=intersect(A,B)) 中查找公共字符串,并将索引保存在idx中。然后我通过 A(idx) 提取公共字符串。我看到结果是按字母顺序排序的。我想对它们进行排序,因为它们在 A 中排序,为什么这些字符串按字母顺序排序?
谢谢。
如文档中所述,您可以添加选项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 版本不支持该'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