-2

I have an array that contains these string.

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

I am then trying to sort alphabetically like this

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

but its displayed like

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

Where as I would like it to be displayed as

@"Building 1",
@"Building 2",
@"Building 3",
@"Building 4",
@"Building 10",
@"Building 14",
@"Car Park",
@"Common Area",
HurkNburkS
  • 5,492
  • 19
  • 100
  • 183

1 Answers1

2

This code sample will do the magic.

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);
salabaha
  • 2,468
  • 1
  • 17
  • 18
  • Better yet, use sortUsingSelector and sort using localizedStandardCompare. Much simpler than the above, with the same results. – Duncan C Mar 21 '15 at 12:51