对NSArray进行排序

era*_*uki 1 arrays sorting iphone filenames nsarray

我有一个NSArray如下:

NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath:filePath];
Run Code Online (Sandbox Code Playgroud)

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,...

我该如何实现这一目标?

Gui*_*ume 5

编写自定义排序功能:

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];
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

NSArray *sortedDirectoryContent = [directoryContent sortedArrayUsingFunction:customSortingFunctionReversedAndNumericFirst context:NULL]
Run Code Online (Sandbox Code Playgroud)

我做了很多假设,但是这段代码适用于你的样本数组和类似的输入值.
主要假设是您只希望此特定顺序用于以数字值开头的字符串.如果不是这种情况,您可以使用此代码使其适应您想要的算法.