[英]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.