OC-数组排序-NSSortDescriptor使用

OC-数组排序-NSSortDescriptor使用

在Object-c中,当有一个班级类MyClass,还有一个学生类Student.在班级类MyClass中通过一个可变数组NSMutableArray保存了许多的学生对象。现在有一个功能需要对学生进行按各种条件排序(按姓名升序,按学号降序,按成绩升序)。

借用上面一个简单的功能来了解一下Object-c中排序描述对象NSSortDescriptor对数组的排序的使用方法。

简单的了解一下以下几个类:Student(学生类)、MyClass(班级类)

Student:(只给接口)

复制代码
 1 @interface Student : NSObject
 2 {
 3     NSString * _name;
 4     NSInteger _num;
 5     NSInteger _score;
 6 }
 7 
 8 - (id)initWithName:(NSString *)name number:(NSInteger)num score:(NSInteger)score;
 9 - (void)setName:(NSString *)name;
10 - (NSString *)name;
11 - (void)setNum:(NSInteger)num;
12 - (NSInteger)num;
13 - (void)setScore:(NSInteger)score;
14 - (NSInteger)score;
15 
16 @end
复制代码

MyClass:(接口)

复制代码
@interface MyClass : NSObject
{
    NSString * _className;
    NSMutableArray * _stuList;
}

- (id)init;
- (void)setClassName:(NSString *)name;
- (NSString*)className;
- (void)addStudent:(Student *)student;
- (void)addStudent:(Student *)student atIndex:(NSInteger) index;
- (void)removeStudent:(Student *)student;
- (void)removeStudentAtIndex:(NSInteger) index;
- (void)replaceStudent:(Student *)student atIndex:(NSInteger) index;
- (void)showStuList;
- (void)sortedByNumber;//按照学号升序
- (void)sortedByScore;//按照分数降序
- (void)sortedByName;//按照名字降序

- (void)sortedByNameAscByNumDescByScoreAsc;
@end
复制代码

MyClass:(具体实现方法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@implementation  MyClass
- ( void )sortedByNumber   //按照学号升序
{
     NSSortDescriptor  *sd1 = [ NSSortDescriptor  sortDescriptorWithKey:@ "_num"  ascending: YES ];
     NSArray  *sdArray = [ NSArray  arrayWithObjects:sd1,  nil ];
     [_stuList sortUsingDescriptors:sdArray];
//    [_stuList sortedArrayUsingDescriptors:sdArray];
}
- ( void )sortedByScore     //按照分数降序
{
     NSSortDescriptor  *sd = [ NSSortDescriptor  sortDescriptorWithKey:@ "_score"  ascending: NO ];
     NSArray  *sdArray = [[ NSArray  alloc]initWithObjects:sd,  nil ];
     [_stuList sortUsingDescriptors:sdArray];
}
- ( void )sortedByName    //按照名字降序
{
     NSSortDescriptor  *sd = [ NSSortDescriptor  sortDescriptorWithKey:@ "_name"  ascending: NO ];
     NSArray  *sdArray = [[ NSArray  array] initWithObjects:sd,  nil ];
     [_stuList sortUsingDescriptors:sdArray];
}
- ( void )sortedByNameAscByNumDescByScoreAsc  //按照名字升序,学号降序,分数升序来排列数组中的对象
{
     NSSortDescriptor  *sdName = [[ NSSortDescriptor  alloc]initWithKey:@ "_name"  ascending: YES ];
     NSSortDescriptor  *sdNum = [[ NSSortDescriptor  alloc]initWithKey:@ "_num"  ascending: NO ];
     NSSortDescriptor  *sdScore = [ NSSortDescriptor  sortDescriptorWithKey:@ "_score"  ascending: YES ];
     NSArray  *sdArray = [[ NSArray  alloc] initWithObjects:sdName,sdNum,sdScore,  nil ];
     [_stuList sortUsingDescriptors:sdArray];
}
@end

就由上面的 sortedByNameAscByNumDescByScoreAsc 方法来分析NSSortDescriptor对象的使用方法。

1.通过NSSortDescriptor对象的对象方法 initWithKey 或是直接通过类方法  sortDescriptorWithKey 生成一个NSSortDescriptor(排序描述)对象,该对象传进一个排序关键字(该关键字是要排序的数组中元素对象的属性),并且设置按照该关键字(属性)是按照升序还是降序。

2.将NSSortDescriptor对象(可以多个)添加到一个数组中。

3.最后通过数组的方法 sortUsingDescriptors ,将第二步中的数组作为参数传递进去,获得的结果就是已经排序好的数组了。

以上方法适用于可变数组和不可变数组,只是方法略微有点不一样。

 

转载:http://www.cnblogs.com/BeyondAverage0908/p/4571638.html

 

转载于:https://www.cnblogs.com/stevenwuzheng/p/5592967.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值