NSSortStable的文档是不合语法的 - 它试图说什么?

时间:2012-03-20 21:06:24

标签: objective-c foundation

我有一个我想要排序的数组,而且由于今年的块是“黑色”,我正在寻找

- (void)sortWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr

我查找了要使用的选项,NSSortStable文档说:

  

指定排序结果应返回比较项目按其最初发生的顺序具有相等值。

     

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

我没有足够的咖啡来理解它的含义,第一句甚至没有语法正确。

有人可以为傻瓜翻译成英文吗?

3 个答案:

答案 0 :(得分:7)

NSSortStable指定如果两个对象的比较相同,则它们的顺序应保持不变。

例如,让我们考虑以下内容:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"one", @"two", @"three", @"four", nil];
[array sortWithOptions:0 usingComparator:^NSComparisonResult(id obj1, id obj2) {
    if ( [obj1 length] < [obj2 length] )
        return NSOrderedAscending;
    if ( [obj1 length] > [obj2 length] )
        return NSOrderedDescending;
    return NSOrderedSame;
}];

如果您未指定NSSortStable,则排序后的数组可以是(one, two, four, three),也可以是(two, one, four, three) onetwo具有相同的长度。两个结果都被接受了。这允许排序算法(更快)执行。

指定NSSortStable时,必须按原始顺序返回同等比较的对象(即首先one,然后two)。

答案 1 :(得分:3)

稳定排序是指尽可能保留元素顺序的排序。

例如,如果您对姓氏进行排序,那么稳定排序会使名字保持与最初出现在容器中的顺序相同。也就是说,如果我们有:

Bob Smith
Tom Jones
Dave Smith
Fred Smith
Al Jones

它会排序

Tom Jones
Al Jones
Bob Smith
Dave Smith
Fred Smith

请注意,Tom仍然高于Al,而Bob仍然高于Dave,他仍然高于Fred。

“不稳定排序”不会尝试保留二级排序,因此运行速度会稍快。

http://en.wikipedia.org/wiki/Sorting_algorithm#Stability

答案 2 :(得分:1)

我相信'有'应该'有',就像这样:

  

指定已排序的结果应按照原始发生的顺序返回 值相等的项目。

也就是说,如果有比较具有相同价值的项目,那些项目应该在最终结果中保持相对于彼此的排序。