?// 為集合字符串排序(cmpare:)
?? ? ? ? ? ?
? ? ? ? ? ? // - null :空類型? 就是字符型的0;
? ? ? ? ? ? // - [NSNull null]是對象類型,能夠存入集合的數據:為其分配了內存,但其中的值為空(不能被排序否則程序會崩潰);
? ? ? ? ? ? // - 對非對象類型指針賦空值用null(如C指針)
?? ? ? ? ? ?
? ? ? ? ? ? // 對集合內的字符串排序:調用排序方法后會創建一個新的集合返回
? ? ? ? ? ? // - sortedArrayUsing...(sort:分類)
? ? ? ? ? ? NSArray *group = @[@"red", @"green", @"blue"];
?
? ? ? ? ? ?
? ? ? ? ? ? // 1.選擇器排序:調用系統的排序方法,即字符串的比較方法
? ? ? ? ? ? NSArray *reorder_S = [group sortedArrayUsingSelector:@selector(compare:)];
? ? ? ? ? ? NSLog(@"selector:%@", reorder_S);
?? ? ? ? ? ?
? ? ? ? ? ? // 2.描述排序
? ? ? ? ? ? // - 提取排序的信息
? ? ? ? ? ? // > Key:沒有key所以使用nil(為自定義對象排序Key就是排序的屬性)
? ? ? ? ? ? // > ascending:布爾類型,YES為升序(ASKII碼值)
? ? ? ? ? ?
? ? ? ? ? ? // - 為方法傳遞排序的參數
? ? ? ? ? ? NSSortDescriptor *group_D = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
?? ? ? ? ?
? ? ? ? ? ? NSArray *reorder_D = [group sortedArrayUsingDescriptors:@[group_D]];
? ? ? ? ? ? NSLog(@"descriptor:%@", reorder_D);
?? ? ? ? ? ?
? ? ? ? ? ? // 3.代碼塊排序:也是調用字符串的比較方法
? ? ? ? ? ? NSArray *reorder_B = [group sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {return [obj1 compare:obj2];}];
? ? ? ? ? ? NSLog(@"block:%@",reorder_B);
? ? ? ? ? ? ?
?? ? ? ? ? ?
? ? ? ? ? ? // - 參數:不會影響排序的順序
? ? ? ? ? ? // > SortCurrent:并行排序,即多線程排序,特點:安全性不好
? ? ? ? ? ? // > SortStable:串行排序,即打單步執行:數據龐大可能效率有點低
? ? ? ? ? ? // - block的實現,因為是取值兩兩比較:使用結果僅有三個,根據返回結果就確定大小然后進行返回
? ? ? ? ? ? reorder_B = [group sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) { return [obj1 compare:obj2]; }];
?? ? ? ? ? ?
?? ? ? ? ? NSLog(@"block:%@",reorder_B);
?