[정수리] ios 정렬 요약

5980 단어

IOS의 몇 가지 간단하고 효과적인 배열 정렬 방법


//첫 번째, 수조를 이용하는sortedArrayUsingComparator는 NSComparator,obj1과obj2가 가리키는 수조의 대상을 호출한다
NSComparator cmptr = ^(id obj1, id obj2){
 if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
 
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
};
NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];
 // 
 NSMutableString *outputBefore = [[NSMutableString alloc] init];
 for(NSString *str in sortArray){
  [outputBefore appendFormat:@"];
 }
 NSLog(@" :%@",outputBefore);
 [outputBefore release];
 // 
 NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];
 
 NSMutableString *outputAfter = [[NSMutableString alloc] init];
 for(NSString *str in array){
  [outputAfter appendFormat:@"];
 }
 NSLog(@" :%@",outputAfter);
 [outputAfter release];

두 번째 정렬 방법은sortedArrayUsingFunction을 이용하여 대응 방법인customSort를 호출하는데 이 방법에서obj1과obj2는 각각 지수 그룹의 대상이다.
NSInteger customSort(id obj1, id obj2,void* context){
 if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
 
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}
 NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];
 // 
 NSMutableString *outputBefore = [[NSMutableString alloc] init];
 for(NSString *str in sortArray){
  [outputBefore appendFormat:@"];
 }
 NSLog(@" :%@",outputBefore);
 [outputBefore release];
 
 NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil];
 
 NSMutableString *outputAfter = [[NSMutableString alloc] init];
 for(NSString *str in array){
  [outputAfter appendFormat:@"];
 }
 NSLog(@" :%@",outputAfter);
 [outputAfter release];

세 번째는sortUsingDescriptors를 이용하여 NSSortDescriptor를 호출합니다
 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:NO];// ,price , 
  NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
  [_totalInfoArray sortUsingDescriptors:sortDescriptors];
  [_airListView refreshTable:_totalInfoArray];
  [sortDescriptor release];
  [sortDescriptors release];

20120619 업데이트
정렬 작업에 있어서 NSArray는 여러 가지 방법을 제공하는데 사용하는 정렬 매개 변수에 따라 descriptor,selector,function,block 정렬로 간단하게 나눌 수 있다.수조를 정렬할 때sortedArrayUsingComparator 방법이 있는데 이곳의 매개 변수는 NSComparator이다. 이 종류는 사실 블록이 정의한 typedef NSComparison Result(^NSComparator)(id obj1, id obj2)이다.그래서 우리는 NSComparator myComparator=^(id obj1, id obj2) {}를 직접 사용한다.블락은 사실 JS의 () {} ()로 볼 수 있다.방법 및.Net의 익명 방법, 즉 성명 없이 직접 사용하는 방법, 주로 리셋, 이벤트 처리, 정렬을 포함한다.성명과 실현은 분리할 수도 있고 함께 쓸 수도 있다.
NSInteger (^blockExample)(int,NSString*)=^(int i,NSString *s)
{
       NSLog(@"%d,%@",i,s);
};
blockExample(42,@"hello");

NSArray 정렬 또는 Block을 매개 변수로 필요로 하는 다른 함수의 경우 다음 두 가지 형식으로 작성할 수 있습니다.
//선언 및 사용
NSComparison ( ^ageComparator )( id, id ) = ^( id o1, id o2 ) {
    //  
};
    NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:ageComparator];
//  , 
    NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:^( id o1, id o2 ) { //...
    }];

예:
 NSArray    *array = [NSArray arrayWithObjects:@"71", @"16", @"51", @"104", @"13",@"2",@"1", nil];


    array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {
        return (arc4random() % 3) - 1;
    }];


   // NSLog(@"array:%@", array);


    NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) { 


        if ([obj1 integerValue] > [obj2 integerValue]) { 
            return (NSComparisonResult)NSOrderedAscending; 
        } 


        if ([obj1 integerValue] < [obj2 integerValue]) { 
            return (NSComparisonResult)NSOrderedDescending; 
        } 
        return (NSComparisonResult)NSOrderedSame; 


    }]; 




sortedArray  


    //  


    NSArray *sortedArray = [srcArrary sortedArrayUsingComparator:^(id obj1, id obj2)


                            {


                                NSComparisonResult result = [obj1 compare:obj2];


                                switch(result)
                                {
                                    case NSOrderedAscending:
                                        return NSOrderedDescending;            
                                    case NSOrderedDescending:
                                        return NSOrderedAscending;
                                    case NSOrderedSame:
                                        return NSOrderedSame;
                                    default:
                                        return NSOrderedSame;  
                                } //  ( )


                            }];

//무작위 정렬
NSArray    *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
    array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {
        return (arc4random() % 3) - 1;
    }];
    NSLog(@"array:%@", array);

좋은 웹페이지 즐겨찾기