繁体   English   中英

排序NSArray

[英]Sorting an NSArray

我有一个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,...

我该如何实现?

编写自定义排序功能:

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]

我做了很多假设,但是这段代码适用于示例数组和类似的输入值。
主要假设是您只希望以数字开头的字符串具有此特定顺序。 如果不是这种情况,则可以使用此代码将其调整为所需的算法。

我认为最简单的解决方案是使用sortedArrayUsingSelector:和caseInsensitiveCompare:(来自NSString):

NSArray *sortedDirectoryContent =
[directoryContent sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM