使用自定義物件排序陣列

比較方法

要麼為物件實現 compare 方法:

- (NSComparisonResult)compare:(Person *)otherObject {
    return [self.birthDate compare:otherObject.birthDate];
}

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];

NSSortDescriptor

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate"
                                              ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [drinkDetails sortedArrayUsingDescriptors:sortDescriptors];

你可以通過向陣列新增多個鍵輕鬆地按多個鍵進行排序。也可以使用自定義比較器方法。看看文件

NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *first = [(Person*)a birthDate];
    NSDate *second = [(Person*)b birthDate];
    return [first compare:second];
}];

效能

通常,-compare:和基於塊的方法比使用 NSSortDescriptor 要快得多,因為後者依賴於 KVC。NSSortDescriptor 方法的主要優點是它提供了一種使用資料而不是程式碼來定義排序順序的方法,這樣可以輕鬆地進行設定,以便使用者可以通過單擊標題行對 NSTableView 進行排序。