OC- 배열 정렬 - NSSortDescriptor 사용

5786 단어 script
Object-c에는 학급류인 MyClass가 있고 학생류인 Student가 있습니다.학급 클래스 MyClass에는 가변 배열 NSMutable Array를 통해 많은 학생 대상이 저장되어 있습니다.현재 한 가지 기능은 학생들에게 각종 조건에 따라 순서를 정해야 한다(성명에 따라 순서를 올리고, 학호에 따라 순서를 낮추고, 성적에 따라 순서를 올리는 것).
위의 간단한 기능을 빌려 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: (구체적 실현 방법)
@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를 통해 두 번째 단계의 수조를 매개 변수로 전달하면 이미 정렬된 수조가 나온다.
이상의 방법은 가변수조와 불가변수조에 적용되지만, 방법은 약간 다르다.

좋은 웹페이지 즐겨찾기