Сортировка 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:)];
}
Надеюсь, поможет.