NSComparisonResult (^myblock)(id,id) = ^(id obj1,id obj2){
// 将obj1和obj2由泛型转换为Studet类型
Student *stu1 = (Student *) obj1;
Student *stu2 = (Student *) obj2;
if ( [stu1.name compare:stu2.name]== 1) {
return NSOrderedAscending;
}else if([stu1.name compare:stu2.name]== -1){
return NSOrderedDescending;
}else{
return NSOrderedSame;
}
};
// 调用block
NSArray *array = [stuarray sortedArrayUsingComparator:myblock];
NSLog(@"==========%@",array);
// 使用数组方法排序:按照年龄降序排列
NSArray *sortedArray = [stuarray sortedArrayUsingSelector:@selector(compareByAgeDown:)];
NSLog(@"%@",sortedArray);
// 使用数组方法排序:按照ID升序排列
NSArray *sortedArray1 = [stuarray sortedArrayUsingSelector:@selector(compareByIDUp:)];
NSLog(@"%@",sortedArray1);
// 使用数组方法排序:按照name降序排序
NSArray *sortedArray2 = [stuarray sortedArrayUsingSelector:@selector(compareByNameDown:)];
NSLog(@"%@",sortedArray2);
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *_name;
int _ID;
int _age;
}
// 声明一个便利构造器
+ (instancetype)studentWithName:(NSString *)name ID:(int)ID age:(int)age;
//使用数组方法排序:按照年龄降序排列
- (NSComparisonResult)compareByAgeDown:(Student *)stu1;
// 使用数组方法排序:按照ID升序排列
- (NSComparisonResult)compareByIDUp:(Student *)stu1;
//// 使用数组方法排序:按照name降序排序
//- (NSComparisonResult)compareByNameDown:(Student *)stu1;
// name的getter
- (NSString *)name;
- (int)age;
@end
Student.m
@implementation Student
- (instancetype)initWithName:(NSString *)name ID:(int)ID age:(int)age{
if (self =[super init]) {
_name = name;
_age = age;
_ID = ID;
}
return self;
}
+ (instancetype)studentWithName:(NSString *)name ID:(int)ID age:(int)age{
return [[[Student alloc] initWithName:name ID:ID age:age] autorelease];
}
- (NSString *)description{
return [[[NSString alloc] initWithFormat:@"%@ %d %d",_name,_ID,_age] autorelease];
}
//- (NSComparisonResult)compareNumber:(id)num{
// if(self > num){
// return NSOrderedDescending;
// }else if(self < num){
// return NSOrderedAscending;
// }else{
// return NSOrderedSame;
// }
//}
// 使用数组方法排序:按照年龄降序排列
- (NSComparisonResult)compareByAgeDown:(Student *)stu1{
// 需求是完成降序排列,如果前一个元素小于后一个元素,则需要返回降序,让sortedArrayUsingSelecter:交换这俩个元素。
if (_age < stu1 ->_age) {
return NSOrderedDescending;
}else if(_age >stu1->_age){
return NSOrderedAscending;
}else{
return NSOrderedSame;
}
}
// 使用数组方法排序:按照ID升序排列
- (NSComparisonResult)compareByIDUp:(Student *)stu1{
if (_ID < stu1->_ID) {
return NSOrderedAscending;
}else if(_ID > stu1->_ID){
return NSOrderedDescending;
}else{
return NSOrderedSame;
}
}
// 使用数组方法排序:按照name降序排序
- (NSComparisonResult)compareByNameDown:(Student *)stu1{
if ([_name compare:stu1->_name] == -1) {
return NSOrderedDescending;
}else if([self.name compare:stu1.name] == 1){
return NSOrderedAscending;
}else{
return NSOrderedSame;
}
}
- (NSString *)name{
return _name;
}
- (int)age{
return _age;
}
@end