我有一个我想要排序的数组,而且由于今年的块是“黑色”,我正在寻找
- (void)sortWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr
我查找了要使用的选项,NSSortStable
文档说:
指定排序结果应返回比较项目按其最初发生的顺序具有相等值。
如果未指定此选项,则可能会或可能不会按原始顺序返回相等的对象。
我没有足够的咖啡来理解它的含义,第一句甚至没有语法正确。
有人可以为傻瓜翻译成英文吗?
答案 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)
one
,two
具有相同的长度。两个结果都被接受了。这允许排序算法(更快)执行。
指定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。
“不稳定排序”不会尝试保留二级排序,因此运行速度会稍快。
答案 2 :(得分:1)
我相信'有'应该'有',就像这样:
指定已排序的结果应按照原始发生的顺序返回 值相等的项目。
也就是说,如果有比较具有相同价值的项目,那些项目应该在最终结果中保持相对于彼此的排序。