• NSArray的排序方法


    转自:http://blog.csdn.net/lixuwen521/article/details/7848893

    1.sortedArrayUsingSelector

    (按Key值大小对NSDictionary排序)
    [plain] view plaincopy
    1. NSMutableArray *array = [NSMutableArray arrayWithObjects:  
    2.                              [NSDictionary dictionaryWithObjectsAndKeys:@"Obj0", [NSNumber numberWithInt:0], nil],  
    3.                              [NSDictionary dictionaryWithObjectsAndKeys:@"Obj5", [NSNumber numberWithInt:5], nil],  
    4.                              [NSDictionary dictionaryWithObjectsAndKeys:@"Obj2", [NSNumber numberWithInt:2], nil],  
    5.                              [NSDictionary dictionaryWithObjectsAndKeys:@"Obj3", [NSNumber numberWithInt:3], nil],  
    6.                              [NSDictionary dictionaryWithObjectsAndKeys:@"Obj1", [NSNumber numberWithInt:1], nil],  
    7.                              [NSDictionary dictionaryWithObjectsAndKeys:@"Obj4", [NSNumber numberWithInt:4], nil], nil];  
    8.       
    9. NSArray *resultArray = [array sortedArrayUsingSelector:@selector(compare:)];  

    因为NSDictionary没有compare的排序比较方法,所以需要我们自己写
    [plain] view plaincopy
    1. .h  
    2. @interface NSDictionary (compare)  
    3. {}  
    4.   
    5. -(NSComparisonResult)compare:(NSDictionary *)otherDictionary;  
    6.   
    7. @end  
    8.   
    9. .m  
    10. @implementation NSDictionary (compare)  
    11.   
    12. - (NSComparisonResult)compare: (NSDictionary *)otherDictionary  
    13. {  
    14.     NSDictionary *tempDictionary = (NSDictionary *)self;  
    15.       
    16.     NSNumber *number1 = [[tempDictionary allKeys] objectAtIndex:0];  
    17.     NSNumber *number2 = [[otherDictionary allKeys] objectAtIndex:0];  
    18.       
    19.     NSComparisonResult result = [number1 compare:number2];  
    20.       
    21.     return result == NSOrderedDescending; // 升序  
    22. //    return result == NSOrderedAscending;  // 降序  
    23. }  
    24.   
    25. @end  

    2.sortedArrayUsingComparator

    [plain] view plaincopy
    1. NSMutableArray *array = [NSMutableArray arrayWithObjects:  
    2.                          [NSDictionary dictionaryWithObjectsAndKeys:@"Obj0", [NSNumber numberWithInt:0], nil],  
    3.                          [NSDictionary dictionaryWithObjectsAndKeys:@"Obj5", [NSNumber numberWithInt:5], nil],  
    4.                          [NSDictionary dictionaryWithObjectsAndKeys:@"Obj2", [NSNumber numberWithInt:2], nil],  
    5.                          [NSDictionary dictionaryWithObjectsAndKeys:@"Obj3", [NSNumber numberWithInt:3], nil],  
    6.                          [NSDictionary dictionaryWithObjectsAndKeys:@"Obj1", [NSNumber numberWithInt:1], nil],  
    7.                          [NSDictionary dictionaryWithObjectsAndKeys:@"Obj4", [NSNumber numberWithInt:4], nil], nil];  
    8.   
    9.   NSArray *resultArray = [array sortedArrayUsingSelector:@selector(compare:)];  
    10.   
    11. NSArray *resultArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {  
    12.       
    13.     NSNumber *number1 = [[obj1 allKeys] objectAtIndex:0];  
    14.     NSNumber *number2 = [[obj2 allKeys] objectAtIndex:0];  
    15.       
    16.     NSComparisonResult result = [number1 compare:number2];  
    17.       
    18.     return result == NSOrderedDescending; // 升序  
    19.       return result == NSOrderedAscending;  // 降序  
    20. }];  

    3.sortedArrayUsingDescriptors & sortUsingDescriptors

    前者带返回值,是NSArray的方法,排好序的数组是返回值中的数组;
    后者不带返回值,是NSMutableArray的方法,是对当前数组自己排序
    [plain] view plaincopy
    1. .h  
    2. @interface Person : NSObject  
    3. {  
    4.     NSString  *_name;  
    5.       
    6.     NSInteger  _age;  
    7. }  
    8. @property (nonatomic, retain) NSString  *name;  
    9. @property (nonatomic, assign) NSInteger  age;  
    10. @end  
    11.   
    12. .m  
    13. @implementation Person  
    14. @synthesize name = _name;  
    15. @synthesize age  = _age;  
    16.   
    17.   
    18. - (void)dealloc  
    19. {  
    20.     [_name release];  
    21.       
    22.     [super dealloc];  
    23. }  
    24.   
    25. @end  
    [plain] view plaincopy
    1.     Person *person1 = [[Person alloc] init];  
    2.     [person1 setName:@"ABC"];  
    3.     [person1 setAge:24];  
    4.       
    5.     Person *person2 = [[Person alloc] init];  
    6.     [person2 setName:@"ACB"];  
    7.     [person2 setAge:22];  
    8.       
    9.     Person *person3 = [[Person alloc] init];  
    10.     [person3 setName:@"ABD"];  
    11.     [person3 setAge:33];  
    12.       
    13.     NSMutableArray *array = [NSMutableArray arrayWithObjects:person1, person2, person3, nil];  
    14.     [person1 release];  
    15.     [person2 release];  
    16.     [person3 release];  
    17.       
    18.     NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"_age" ascending:YES];  
    19.       
    20.     NSArray *tempArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];  
    21.       
    22.     for(NSInteger i = 0; i < [tempArray count]; i++)  
    23.     {  
    24.         NSLog(@"%@--------%d ", [[tempArray objectAtIndex:i] name], [[tempArray objectAtIndex:i] age]);  
    25.     }  
    26.       
    27. //    [array sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];  
    28. //      
    29. //    for(NSInteger i = 0; i < [array count]; i++)  
    30. //    {  
    31. //        NSLog(@"%@--------%d ", [[array objectAtIndex:i] name], [[array objectAtIndex:i] age]);  
    32. //    }  

    sortDescriptorWithKey:@"_age",以age作为标准来做比较。

     

    [plain] view plaincopy
    1.     Person *person1 = [[Person alloc] init];  
    2.     [person1 setName:@"ABCD"];  
    3.     [person1 setAge:24];  
    4.       
    5.     Person *person2 = [[Person alloc] init];  
    6.     [person2 setName:@"ACBD"];  
    7.     [person2 setAge:22];  
    8.       
    9.     Person *person3 = [[Person alloc] init];  
    10.     [person3 setName:@"ABDC"];  
    11.     [person3 setAge:33];  
    12.       
    13.     Person *person4 = [[Person alloc] init];  
    14.     [person4 setName:@"ACDB"];  
    15.     [person4 setAge:22];  
    16.       
    17.     NSMutableArray *array = [NSMutableArray arrayWithObjects:person1, person3, person4, person2, nil];  
    18.     [person1 release];  
    19.     [person2 release];  
    20.     [person3 release];  
    21.     [person4 release];  
    22.       
    23.     NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"_age" ascending:YES];  
    24.     NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"_name" ascending:YES];  
    25.       
    26.     NSArray *tempArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];  
    27.       
    28.     for(NSInteger i = 0; i < [tempArray count]; i++)  
    29.     {  
    30.         NSLog(@"%@--------%d ", [[tempArray objectAtIndex:i] name], [[tempArray objectAtIndex:i] age]);  
    31.     }  
    32.       
    33. //    [array sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];  
    34. //      
    35. //    for(NSInteger i = 0; i < [array count]; i++)  
    36. //    {  
    37. //        NSLog(@"%@--------%d ", [[array objectAtIndex:i] name], [[array objectAtIndex:i] age]);  
    38. //    }  

        NSSortDescriptor *sortDescriptor1 = [NSSortDescriptorsortDescriptorWithKey:@"_age"ascending:YES];

       NSSortDescriptor *sortDescriptor2 = [NSSortDescriptorsortDescriptorWithKey:@"_name"ascending:YES];

        NSArray *tempArray = [array sortedArrayUsingDescriptors:[NSArrayarrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];


    这里的NSArray中的第一元素表示首先按照这个元素的升序或者降序进行排序,对于有重复项的,再按照第二元素进行排序,依次进行类推

     

  • 相关阅读:
    RPC调用框架比较分析--转载
    hbase快速入门
    美国诚实签经验——着装,戒指,手表装土豪,医生预约单,流水、房产和工作证明
    美国诚实签经验——英语演练回答,回答中说明目的,需要的时间和费用
    美国诚实签经验——医院预约单和医院资料,孕中保险是加分项
    东京一日游
    cassandra删除所有数据,重置为初始状态——删除<data dir>/data/* <data dir>/commitlog/* <data dir>/saved_caches/* 重启cassandra即可
    echo 到 stderr
    bash编程 将一个目录里所有文件存为一个array 并分割为三等分——利用bash array切片
    linkerd——针对java的为微服务提供可靠性的proxy,服务发现重试LB等
  • 原文地址:https://www.cnblogs.com/wangpei/p/3613987.html
Copyright © 2020-2023  润新知