Search code examples
iosobjective-csortingnsarray

Sort NSArray based on a list of values?


How to sort an NSArray based on a list of values ? For example:

An object of the NSArray has a property :

NSString* language; //- may contain value @"FR", @"NL", @"SP", @"EN", and others languages

How can we sort based on the list of values like:


NSArray* sortingByList = @[@"FR", @"NL", @"SP", @"EN"];

The expected results should look like this:

- FR
- FR
- NL
- NL
- NL
- SP
- SP
- EN
- EN
- EN
- other languages 
...

Solution

  • - (NSArray*) sortArray:(NSArray *)language withOrder:(NSArray *)sortingByList
    {
        return [language sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
            NSUInteger pos1 = [sortingByList indexOfObject:obj1];
            NSUInteger pos2 = [sortingByList indexOfObject:obj2];
            if (pos1 < pos2)
                return NSOrderedAscending;
            else if (pos1 == pos2)
                return NSOrderedSame;
            else
                return NSOrderedDescending;
        }];
    }