Mobile/iOS

[iOS] 정렬하기

out of coding 2016. 8. 1. 11:48

리스트 같은것을 표현을 할 경우에, 정렬을 하여야 한다.

정렬 방법에 대해서 이야기 하도록 한다.



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;

}];


* 오름차순을 기준으로 하였음.