[iOS] 정렬하기
리스트 같은것을 표현을 할 경우에, 정렬을 하여야 한다.
정렬 방법에 대해서 이야기 하도록 한다.
1. NSSortDescriptor 이용
NSString *LAST = @"lastName";
NSString *FIRST = @"firstName";
NSMutableArray *array = [NSMutableArray array];
NSArray *sortedArray;
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"A",FIRST,@"1",LAST,nil];
[array addObject:dict];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"B",FIRST,@"2",LAST,nil];
[array addObject:dict];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"C",FIRST,@"3",LAST,nil];
[array addObject:dict];
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc]
initWithKey:LAST
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor *firstNameDescriptor = [[NSSortDescriptor alloc]
initWithKey:FIRST
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)];
NSArray *descriptors = [NSArray arrayWithObjects:lastNameDescriptor, firstNameDescriptor, nil];
sortedArray = [array sortedArrayUsingDescriptors:descriptors];
* NSSortDescriptor의 첫번째를 비교한후에, 같은 값일 경우에는 다음 조건을 비교한다.
2. Block 정렬
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue])
return (NSComparisonResult)NSOrderDescending;
else if ([obj1 integerValue] < [obj2 integerValue] )
return (NSComparisonResult)NSOrderAscending;
else
return (NSComparisonResult)NSOrderSame;
}];
* 오름차순을 기준으로 하였음.