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,...
我该如何实现这一目标?
编写自定义排序功能:
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)
我做了很多假设,但是这段代码适用于你的样本数组和类似的输入值.
主要假设是您只希望此特定顺序用于以数字值开头的字符串.如果不是这种情况,您可以使用此代码使其适应您想要的算法.