zoukankan      html  css  js  c++  java
  • 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中的第一元素表示首先按照这个元素的升序或者降序进行排序,对于有重复项的,再按照第二元素进行排序,依次进行类推

     

  • 相关阅读:
    Building Java Projects with Gradle
    Vert.x简介
    Spring及Spring Boot 国内快速开发框架
    dip vs di vs ioc
    Tools (StExBar vs Cmder)which can switch to command line window on context menu in windows OS
    SSO的定义、原理、组件及应用
    ModSecurity is an open source, cross-platform web application firewall (WAF) module.
    TDD中测试替身学习总结
    Spring事务银行转账示例
    台式机(华硕主板)前面板音频接口(耳机和麦克风)均无声的解决办法
  • 原文地址:https://www.cnblogs.com/wangpei/p/3613987.html
Copyright © 2011-2022 走看看