OC NSArray数组排序

一、一般排序

1         // 排序
2         NSArray *arr = @[@"1",@"3",@"2",@"5"];
3         NSArray *newarr = [arr sortedArrayUsingSelector:@selector(compare:)];
4         NSLog(@"%@",newarr);

二、高级排序(数组中存的是对象,按对象的属性进行排序)

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Student : NSObject
 4 
 5 @property (assign ,nonatomic) int age;
 6 
 7 //提供一种比较方式
 8 - (NSComparisonResult)compareStudentWithAge:(Student *)tempStudent;
 9 
10 
11 @end
12 
13 
14 
15 
16 #import "Student.h"
17 
18 @implementation Student
19 
20 - (NSComparisonResult)compareStudentWithAge:(Student *)tempStudent
21 {
   //方法1:

//      NSNumber *num1 = [[NSNumber alloc] initWithInteger:self.age];

//      NSNumber *num2 = [[NSNumber alloc] initWithInteger:tempStudent.age];

//      return [num1 compare:num2];

    //方法2:
22     if (self.age>tempStudent.age) {
23         return NSOrderedDescending;
24     }
25     else if (self.age<tempStudent.age)
26         return NSOrderedAscending;
27     else
28         return NSOrderedSame;
29 }
30 
31 -(NSString *)description
32 {
33     return [NSString stringWithFormat:@"age:%d",self.age];
34 }
35 
36 @end
37 
38 #import <Foundation/Foundation.h>
39 
40 #import "Student.h"
41 int main(int argc, const char * argv[]) {
42     @autoreleasepool {
43 
44         Student *stu1 = [[Student alloc] init];
45         stu1.age= 18;
46         Student *stu2 = [[Student alloc] init];
47         stu2.age= 15;
48         Student *stu3 = [[Student alloc] init];
49         stu3.age= 19;
50         
51         NSArray *stuArr = @[stu1,stu2,stu3];
52         NSArray *newStuArr = [stuArr sortedArrayUsingSelector:@selector(compareStudentWithAge:)];
53         NSLog(@"%@",newStuArr);
54 }
55 return 0;
56 }

三、超级排序(数组中对象多属性)

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface People : NSObject
 4 
 5 @property (assign,nonatomic) NSInteger age;
 6 @property (assign, nonatomic) NSInteger score;
 7 @property (copy,nonatomic) NSString *name;
 8 
 9 @end
10 
11 
12 
13 
14 
15 #import "People.h"
16 
17 @implementation People
18 
19 
20 - (NSString *)description
21 {
22     return [NSString stringWithFormat:@"age:%ld score:%ld name:%@", self.age,self.score,self.name];
23 }
24 
25 
26 #import <Foundation/Foundation.h>
27 #import "People.h"
28 
29 int main(int argc, const char * argv[]) {
30     @autoreleasepool {
31         
32         People *stu1 = [[People alloc] init];
33         stu1.age = 18;
34         stu1.score = 59;
35         stu1.name = @"bowen1";
36         
37         People *stu2 = [[People alloc] init];
38         stu2.age = 18;
39         stu2.score = 59;
40         stu2.name = @"bowen2";
41         
42         People *stu3 = [[People alloc] init];
43         stu3.age = 20;
44         stu3.score = 70;
45         stu3.name = @"bowen3";
46         
47         People *stu4 = [[People alloc] init];
48         stu4.age = 16;
49         stu4.score = 62;
50         stu4.name = @"bowen4";
51         
52         People *stu5 = [[People alloc] init];
53         stu5.age = 15;
54         stu5.score = 80;
55         stu5.name = @"bowen5";
56         
57         NSArray *arr = @[stu1,stu2,stu3,stu4,stu5];
58         
59         // 排序描述,数组按属性排序 NSSortDescriptor
60         NSSortDescriptor *ageSort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
61         NSSortDescriptor *scoreSort = [[NSSortDescriptor alloc] initWithKey:@"score" ascending:YES];
62         NSSortDescriptor *nameScort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
63         
64         //使用[排序描述]对数组进行排序
65         NSArray *newArr = [arr sortedArrayUsingDescriptors:@[ageSort,scoreSort,nameScort]];
66         
67         NSLog(@"%@",newArr);
68         
69     }
70     return 0;
71 }
72 
73 @end
原文地址:https://www.cnblogs.com/oc-bowen/p/5047806.html