Сортировка NSArray - PullRequest
       12

Сортировка NSArray

1 голос
/ 18 февраля 2010

У меня есть NSArray следующим образом:

NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath:filePath];

Файлы в filePath:

11.thm, 12.thm, 13.thm, ..., Text_21.thm, Text_22.thm, Text_23.thm, ...

Я бы хотел отсортировать NSArray в следующем порядке:

13.thm, 12.thm, 11.thm, ..., Text_23.thm, Text_22.thm, Text_21.thm, ...

Как мне этого добиться?

Ответы [ 2 ]

5 голосов
/ 18 февраля 2010

Написать собственную функцию сортировки:

NSInteger customSortingFunctionReversedAndNumericFirst(NSString *string1, NSString *string2, void *context) {
    NSCharacterSet *decimalCharacterSet;
    BOOL firstStringStartsWithNumeric,
        secondStringStartsWithNumeric;


    decimalCharacterSet = [NSCharacterSet decimalDigitCharacterSet];
    firstStringStartsWithNumeric = [decimalCharacterSet characterIsMember:[string1 characterAtIndex:0]];
    secondStringStartsWithNumeric = [decimalCharacterSet characterIsMember:[string2 characterAtIndex:0]];



    if (firstStringStartsWithNumeric != secondStringStartsWithNumeric) {
        return firstStringStartsWithNumeric ? NSOrderedAscending : NSOrderedDescending;
    }

    return [string2 compare:string1 options:NSNumericSearch];
}

и используйте его так:

NSArray *sortedDirectoryContent = [directoryContent sortedArrayUsingFunction:customSortingFunctionReversedAndNumericFirst context:NULL]

Я сделал много предположений, но этот код работает с вашим образцом массива и аналогичными входными значениями.
Основное предположение состоит в том, что вы хотели этот конкретный порядок только для строк, которые начинаются с числового значения. Если это не так, вы можете использовать этот код, чтобы адаптировать его к желаемому алгоритму.

2 голосов
/ 18 февраля 2010

Я думаю, что самое простое решение - использовать sortedArrayUsingSelector: with caseInsensitiveCompare: (из NSString):

NSArray *sortedDirectoryContent =
[directoryContent sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...