我使用交叉函数来查找两个单元格数组A和B中的公共字符串([〜,idx] = intersect(A,B))并保存 idx中的索引。然后我用A(idx)提取公共字符串。我看到结果按字母顺序排序。我想在A中排序它们,为什么这些字符串按字母顺序排序?
感谢。
答案 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版本不支持'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