Ios 排序NSMutableArray在目标C中包含NSMutableString
新手问题 我正在使用包含卡片元素(名称和电子邮件地址)的NSMutableArray*myBook 我希望我的书以降序列表显示 地址簿Ios 排序NSMutableArray在目标C中包含NSMutableString,ios,objective-c,nsmutablearray,nsmutablestring,Ios,Objective C,Nsmutablearray,Nsmutablestring,新手问题 我正在使用包含卡片元素(名称和电子邮件地址)的NSMutableArray*myBook 我希望我的书以降序列表显示 地址簿 #import <Foundation/Foundation.h> #import "AddressCard.h" @interface AddressBook : NSObject @property (nonatomic, copy) NSMutableString *bookName; @property (nonatomic , stro
#import <Foundation/Foundation.h>
#import "AddressCard.h"
@interface AddressBook : NSObject
@property (nonatomic, copy) NSMutableString *bookName;
@property (nonatomic , strong) NSMutableArray *book;
地址卡
- (NSComparisonResult) compareNames: (id) element{
return [name compare:[element name]];
}
我的CompareNames方法返回升序结果。我怎样才能返回呢
谢谢 当-(void)sortUsingSelector:(SEL)comparator
方法假定按升序对数组的元素进行排序时,如果数组小于参数,则comparator方法应返回sensorderedescing
,如果数组大于参数,和sensorderedname
,如果它们相等
由于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:)];
}
希望有帮助。尝试
返回[self.name compare:[element name]]代码>@rmaddy它不起作用。啊,根据公认的答案,我误解了你的问题。您的排序正以相反的顺序进行。或者反转比较:return[aCard.name compare:self.name]
@lancy我改变了compareNames方法:将(AddressCard*)aCard作为参数,它成功了。与使用(id)元素作为参数相比,这真的可以接受吗?@user3213703,id工作得很好,我只是喜欢静态类型检查。
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
- (NSComparisonResult)compareNameInDesendingOrder:(AddressCard *)aCard {
return -[self.name compare:[aCard name]];
}
- (void)sortInDesendingOrder {
[book sortUsingSelector:@selector(compareNameInDesendingOrder:)];
}