值得一提的是,這種方法不提供自身的遞歸循環中多種排序標準操作。比方說,你要有點像這個unsortedList = @[@{@"name":"...", @"isFavourite":"..."},...]
放置最愛之前不喜歡的元素和名稱的字母順序排序每個小組的數組,下面的代碼將無法正常工作:
sortedArray = [unsortedList sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSDictionary *one = (NSDictionary*)obj1;
NSDictionary *two = (NSDictionary*)obj2;
NSString *name1 = [one objectForKey:@"name"];
NSString *name2 = [two objectForKey:@"name"];
NSInteger isFav1 = [[one objectForKey:@"isFavourite"] integerValue];
NSInteger isFav2 = [[two objectForKey:@"isFavourite"] integerValue];
if (isFav1 > isFav2)
return NSOrderedAscending;
else if (isFav1 < isFav2)
return NSOrderedDescending;
else
return [name1 compare:name2];
}];
你必須介紹一下里面的一個或多個for
循環塊,所以我發現更高效的複雜分類操作使用sortedArrayUsingDescriptors:
這樣的:
NSSortDescriptor *descriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"isFavourite" ascending:NO];
NSSortDescriptor *descriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray = [unsortedList sortedArrayUsingDescriptors:@[descriptor1, descriptor2]];