NSArray使用的sortingalgorithm是否稳定sorting?

NSArray中各种sorting方法使用的sortingalgorithm是否稳定 ? (就像它们是“稳定sorting”algorithm一样,其中具有相同sorting键的项目的相对顺序被保存)。

除非使用NSSortStable否则不能保证稳定sorting。 从NSSortOptions的文档 :

NSSortStable

指定sorting的结果应该返回比较的项目具有相同的值,按原来的顺序排列。

如果未指定此选项,则相等对象可能会(也可能不会)按原始顺序返回。

如果您需要保证稳定的sorting,请尝试如下所示:

 [array sortWithOptions:NSSortStable usingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2]; }]; 

我发现的唯一一个“官方”答案是苹果公司Chris Kane 发布的2002年邮件列表post :

NSArray / NSMutableArray的sorting方法的稳定性是不确定的,所以你应该预料到它们是不稳定的。 没有定义,情况可能也会随着发布而变化,尽pipe我不((我))预料到这是可能的。 目前的实现使用快速sorting,这种algorithm与BSD的qsort()例程几乎相同。 大量的实验发现,在testing中我们很难做到比我们通过的一般types的数据更好。 [当然,如果有关于正在sorting的数据的附加信息,可以使用其他algorithm或修改来帮助解决这个问题。]

我不知道这是否是真的,考虑到这个职位的年龄,但最好假设NSArray的sorting方法不稳定。

在文件中 ,没有详细说明相同项目的最终顺序。

因此,我觉得对订单做任何假设都是一个坏主意。 即使您通过实验确定订单是什么,也可以根据数组中的项目数量或iOS的哪个版本进行sorting来更改。

对我来说,我会坚持文件提供的承诺。