2015-03-21 6 views
-2

У меня есть массив, содержащий эту строку.сортировка NSArray строк с номерами

@"Common Area", 
@"Building 1", 
@"Building 2", 
@"Building 3", 
@"Building 4", 
@"Building 10", 
@"Building 14", 
@"Car Park", 

Я тогда пытаюсь сортировать по алфавиту, как этот

areaArray = [areaArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

но его отображается как

@"Building 1", 
@"Building 10", 
@"Building 14", 
@"Building 2", 
@"Building 3", 
@"Building 4", 
@"Car Park", 
@"Common Area", 

Где, как я хотел бы, чтобы отображаться как

@"Building 1", 
@"Building 2", 
@"Building 3", 
@"Building 4", 
@"Building 10", 
@"Building 14", 
@"Car Park", 
@"Common Area", 

ответ

2

Этот образец кода будет выполнять магия.

NSArray *stringsArray = @[@"Common Area", @"Building 1", @"Building 2", @"Building 3", @"Building 4", @"Building 10", @"Building 14", @"Car Park"]; 


static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | 
NSNumericSearch | 
NSWidthInsensitiveSearch | NSForcedOrderingSearch; 

NSLocale *currentLocale = [NSLocale currentLocale]; 

NSComparator finderSortBlock = ^(id string1, id string2) { 
    NSRange string1Range = NSMakeRange(0, [string1 length]); 
    return [string1 compare:string2 options:comparisonOptions range:string1Range 
        locale:currentLocale]; 
}; 

NSArray *finderSortArray = [stringsArray sortedArrayUsingComparator:finderSortBlock]; 

NSLog(@"finderSortArray: %@", finderSortArray); 
+0

Еще лучше, используйте sortUsingSelector и сортируйте с помощью localizedStandardCompare. Гораздо проще, чем выше, с теми же результатами. –

Смежные вопросы