[정수리] ios 정렬 요약
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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.