您的位置:首页 > 移动开发 > IOS开发

iOS中的NSArraySort(^块语法)

2015-08-12 11:11 645 查看
main.m

//    NSArray *array =@[@"aa",@"ee",@"jj",@"mm",@"ss",@"kk"];
//    NSLog(@"%@",array);
//    NSArray *sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
//     NSLog(@"%@",sortArray);
//

//    Student *stu1 = [Student studentWithName:@"chi" age:15 score:45.5 stuNum:@"1234"];
//     Student *stu2 = [Student studentWithName:@"niuniu" age:21 score:41 stuNum:@"34435"];
//     Student *stu3 = [Student studentWithName:@"paopao" age:33 score:22 stuNum:@"2122334"];
//     Student *stu4 = [Student studentWithName:@"doudou" age:5 score:99 stuNum:@"6172354"];
//     NSArray *array =@[stu1,stu2,stu3,stu4];
//      NSLog(@"%@",array);
//     NSArray *array1 = [array sortedArrayUsingSelector:@selector(compareByName:)];
//     NSLog(@"%@",array1);
//
//    NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareByAge:)];
//     NSLog(@"%@",array2);
//    NSArray *array3 = [array sortedArrayUsingSelector:@selector(compareByScore:)];
//    NSLog(@"%@",array3);
//    NSArray *array4 = [array sortedArrayUsingSelector:@selector(compareByStuNum:)];
//    NSLog(@"%@",array4);
//     NSMutableArray *arrayw =[@[stu1,stu2,stu3,stu4] mutableCopy];
//     [arrayw sortUsingSelector:@selector(compareByName:)];
//        NSLog(@"%@",arrayw);

//block块语法
//block 可以在函数内部定义匿名函数.
//Block -- 实现求两个数的最大值
//int (^)(int a, int b) Block类型
//    int (^maxBlock)(int a, int b) = ^int(int a, int b){
//
//        return a > b ? a : b;
//    };
//
//
//    //如何掉用block
//    int max = maxBlock(3,5);
//    NSLog(@"%d", max);
//    //1.定义Block 输出 I love iOS!
//    void (^loveBlock)() = ^(){
//        NSLog(@"I love iOS !");
//    };
//
//    //调用
//    loveBlock();
//    //2.定义一个block 将整形转为字符串
//
//    NSString* (^zhuanhuanBloc)(int a) = ^NSString* (int a)
//    {
//
//        return [NSString stringWithFormat:@"%d",a ];
//
//    };
//
//
//
//
//    zhuanhuanBloc(4);
//
//    //3.定义 BlocK实现将一个整形数转换成NSNumber对象.
//    NSNumber* (^nsnumberBlock)(int a) = ^NSNumber* (int a)
//    {
//
//        //return @(a);
//
//      return   [NSNumber numberWithInt:a];
//
//    };
//
//    //nsnumberBlock(3);
//    NSLog(@"%@",nsnumberBlock(3));
//
//    //4.定义Block传入字符串,放回全部大写之后的字符串对象
//
//    NSString *(^bigBlock)(NSString *a) = ^NSString *(NSString *a){
//       return [a uppercaseString];
//    };
//
//    NSLog(@"%@",bigBlock(@"jfdlskafk"));
//
//    //5.定义Block 传入字符串,返回首字母大写之后的字符串对象
//    typedef NSString *(^FistBigBlock)(NSString *a);
//    FistBigBlock fist = ^NSString *(NSString *a){
//        return [a capitalizedString];
//    };
//
//    NSLog(@"%@",fist(@"fdsaf"));
//    //6.定义 Blcok实现两个字符串对象的比较
//    typedef NSComparisonResult(^BijiaoBlock)(NSString *a,NSString *b);
//
//    BijiaoBlock bijiao = ^NSComparisonResult(NSString *a,NSString *b){
//       return [a compare:b];
//    };
//    if (bijiao(@"fdsa",@"fdsa") == 0) {
//        NSLog(@"相等");
//    }
//
//块排序
//    NSArray *array1 = @[@"ss",@"zz",@"aa",@"yy"];
//   NSArray *bb = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//        NSString *str1 = obj1;
//        NSString *str2 = obj2;
//       return [str1 compare:str2];
//    }];
//    NSLog(@"%@",bb);
//创建不可变数组,管理学生对象
Student *stu1 = [Student studentWithName:@"chi" age:15 score:45.5 stuNum:@"1234"];
Student *stu2 = [Student studentWithName:@"niuniu" age:21 score:41 stuNum:@"34435"];
Student *stu3 = [Student studentWithName:@"paopao" age:33 score:22 stuNum:@"2122334"];
Student *stu4 = [Student studentWithName:@"doudou" age:5 score:99 stuNum:@"6172354"];
NSArray *array =@[stu1,stu2,stu3,stu4];
NSArray *array1 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Student *stu1 = (Student *)obj1;
Student *stu2 = (Student *)obj2;
return [[stu1 name] compare: [stu2 name]];
}];
NSLog(@"%@",array1);
//创建可变数,管理上述学生

NSMutableArray *mArray = [@[stu1,stu2,stu3,stu4] mutableCopy];
NSLog(@"%@",mArray);
//可变数组和数组的快速排序的方法不同一个是sortUsingComparator一个是sortedArrayUsingComprator
[mArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Student *stu1 = (Student *)obj1;
Student *stu2 = (Student *)obj2;

//NSInteger age1 = [self age];
//  NSInteger age2 = [stu age];
return -[@([stu1 score]) compare: @([stu2 score])];
}];
NSLog(@"%@",mArray);


Student.h

@public
NSString *_name;
NSInteger _age;
CGFloat _score;
NSString *_stuNum;
}

- (NSString *)name;
- (NSInteger)age;
- (CGFloat)score;
- (NSString *)stuNum;

- (id)initWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum;
+ (id)studentWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum;

//按姓名升序
- (NSComparisonResult)compareByName:(Student *)stu;

//年龄降序
- (NSComparisonResult)compareByAge:(Student *)stu;
//学号对象
- (NSComparisonResult)compareByStuNum:(Student *)stu;
//分数降序
- (NSComparisonResult)compareByScore:(Student *)stu;


Student.m

@implementation Student

- (NSString *)name
{
return _name;
}
- (NSInteger)age
{
return _age;
}
- (CGFloat)score
{
return _score;
}
- (NSString *)stuNum
{
return _stuNum;
}
- (id)initWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum
{
if (self = [super init]) {
_name = name;
_age = age;
_score = score;
_stuNum = stuNum;
}
return self;
}
+ (id)studentWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum
{
Student *stu = [[Student alloc] initWithName:name age:age score:score stuNum:stuNum];
return stu;
}

//按姓名升序
- (NSComparisonResult)compareByName:(Student *)stu
{

NSString *name1 = [self name];
NSString *name2 = [stu name];
return [name1 compare:name2];

}

//年龄降序
- (NSComparisonResult)compareByAge:(Student *)stu
{
NSInteger age1 = [self age];
NSInteger age2 = [stu age];
return -[@(age1) compare: @(age2)];
}
//学号对象
- (NSComparisonResult)compareByStuNum:(Student *)stu
{
return [[self stuNum] compare:[stu stuNum]];
}
//分数降序
- (NSComparisonResult)compareByScore:(Student *)stu
{
NSInteger score1 = [self score];
NSInteger score2 = [stu score];
return -[@(score1) compare: @(score2)];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"%@,  %ld,   %@,    %.2f", _name, _age, _stuNum, _score];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: