2012-03-20 20 views
3

我有一個數組,我想排序,因爲模塊是今年的「黑」,我是看着NSSortStable的文檔是不合語法的 - 它試圖說什麼?

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

我擡頭用什麼樣的選項,並且NSSortStable文件說:

指定排序後的結果應該返回,比較的項目具有相同的值,它們按原來的順序排列。

如果未指定此選項,則相等對象可能會(也可能不會)按其原始順序返回。

我沒有足夠的咖啡來理解它的說法,第一句話甚至沒有語法上的正確性。

任何人都可以將傻瓜語翻譯成英語嗎?

+0

第一句在語法上看起來不正確,因爲有一個隱含的「上述聲明」前綴。 – 2012-03-20 21:29:53

+1

我個人無法理解你的第一句話! :)但我更喜歡文檔是「非常正確」! – Clafou 2012-03-20 21:52:48

+0

「...應該返回比較項目具有同等價值......」缺少一些詞語。 – Gruntcakes 2012-03-20 23:45:17

回答

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)。

3

穩定排序是儘可能保留元素順序的排序。

例如,如果您要對姓氏進行排序,那麼穩定的排序會按照最初出現在容器中的順序保留名字。也就是說,如果我們有:

Bob Smith 
Tom Jones 
Dave Smith 
Fred Smith 
Al Jones 

這將排序,

Tom Jones 
Al Jones 
Bob Smith 
Dave Smith 
Fred Smith 

注意,湯姆仍高於Al和鮑勃仍高於戴夫是誰仍高於弗雷德。

「不穩定排序」不會嘗試保留次排序,因此可以運行得稍快。

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

1

我相信「有」應該是「有」,像這樣:

指定排序的結果應該具有它們最初發生的順序同等價值的回報相比,項目

也就是說,如果比較的項目具有相同的值,那麼這些項目在最終結果中應該保持相對於彼此的排序。

+0

我相信你是對的。我爲此提交了雷達:// 28907830,因此它會得到修復。 – 2016-10-26 17:31:10

相關問題