oc72--NSArray排序

复制代码
//  Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, assign) int age;
@end
复制代码
复制代码
//  Person.m

#import "Person.h"

@implementation Person

- (NSString *)description
{
    return [NSString stringWithFormat:@"age = %i", _age];
}
@end
复制代码
复制代码
//
//  main.m
//  NSArray排序

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {

    NSArray *arr1 = @[@10, @20, @5, @7, @15];  //oc中的数字,@5是oc的对象,
    NSLog(@"排序前: %@", arr1);//(10,20,5,7,15)
    // 注意: 想使用compare方法对数组中的元素进行排序, 那么数组中的元素必须是Foundation框架中的对象(oc对象), 也就是说不能是自定义对象
    NSArray *newArr1 = [arr1 sortedArrayUsingSelector:@selector(compare:)]; //NSArray是不可变的,所以要用新的数组接收。
    NSLog(@"排序后: %@", newArr1);//(5,7,10,15,20)
    
    
    Person *p1 = [Person new];
    p1.age = 10;
    
    Person *p2 = [Person new];
    p2.age = 20;
    
    Person *p3 = [Person new];
    p3.age = 5;
    
    Person *p4 = [Person new];
    p4.age = 7;
    
    NSArray *arr = @[p1, p2, p3, p4];
    NSLog(@"排序前: %@", arr);//("age = 10","age = 20","age = 5","age = 7")

    // 按照人的年龄进行排序
    // 不能使用compare:方法对自定义对象进行排序
    //NSArray *newArr11 = [arr sortedArrayUsingSelector:@selector(compare:)];
    
    // 该方法默认会按照升序排序,NSSortStable表示是安全的,涉及多线程,
    NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
        // 每次调用该block都会取出数组中的两个元素给我们,二分算法,
        NSLog(@"obj1 = %@, obj2 = %@", obj1, obj2); //排序算法
        return obj1.age > obj2.age;
//        return obj1.age < obj2.age;
        /*
        if (obj1.age > obj2.age) {
            // 5 4
            return NSOrderedDescending;
        }else if(obj1.age < obj2.age)
        {
            // 4 5
            return NSOrderedAscending;
        }else
        {
            return NSOrderedSame;
        }
         */
    }];
    NSLog(@"排序后: %@", newArr);// ("age = 5","age = 7","age = 10","age = 20")
    return 0;
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7440624.html,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值