Сортировка NSMutableArray содержит NSMutableString в Задаче C

Вопрос новичка,

Я играю с NSMutableArray *myBook, который содержит элементы карты (имя и адрес электронной почты).

Я хочу, чтобы моя книга отображалась в нисходящем списке.

addressbook.h

#import <Foundation/Foundation.h>
#import "AddressCard.h"
@interface AddressBook : NSObject

@property (nonatomic, copy) NSMutableString *bookName;

@property (nonatomic , strong) NSMutableArray *book;

AddressCard.h

#import <Foundation/Foundation.h>

@interface AddressCard : NSObject

@property (nonatomic, copy) NSMutableString *name, *email;

AddressBook.m

- (void) sort{
    [book sortUsingSelector:@selector(compareNames:)];
}

- (void) showList{

    NSLog(@"====== Contents of: %@ =======",bookName);


    for (AddressCard *theCard in book) {
        NSLog(@"%-20s    %-32s", [theCard.name UTF8String], [theCard.email UTF8String] );
    }

    NSLog(@"===============================");
}

AddressCard.m

- (NSComparisonResult) compareNames: (id) element{


    return [name compare:[element name]];
}

мой метод CompareNames возвращает результат по возрастанию. Как мне сделать это, чтобы вернуться по убыванию?

Спасибо!

1 ответ

Решение

В то время как - (void)sortUsingSelector:(SEL)comparator Предполагается, что для сортировки элементов массива в порядке возрастания метод сравнения должен вернуть NSOrderedAscending если массив меньше, чем аргумент, NSOrderedDescending если массив больше, чем аргумент, и NSOrderedSame если они равны

Поскольку NSComparisonResult определяют как:

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};

typedef NSInteger NSComparisonResult;

Все, что вам нужно, это нисходящий компаратор, что-то вроде:

- (NSComparisonResult)compareNameInDesendingOrder:(AddressCard *)aCard {
    return -[self.name compare:[aCard name]];
}

- (void)sortInDesendingOrder {
    [book sortUsingSelector:@selector(compareNameInDesendingOrder:)];
}

Надеюсь, поможет.

Другие вопросы по тегам