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 @endMyClass:(接口)
@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; @endMyClass:(具體實現方法)
@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 ,將第二步中的數組作為參數傳遞進去,獲得的結果就是已經排序好的數組了。
以上方法適用于可變數組和不可變數組,只是方法略微有點不一樣。
轉載于:https://www.cnblogs.com/BeyondAverage0908/p/4571638.html
總結
以上是生活随笔為你收集整理的OC-数组排序-NSSortDescriptor使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring和Struts2整合
- 下一篇: javascript调用Flash里对象