如何使用字母数字值对数组进行排序?

iPh*_*Dev 3 sorting iphone objective-c

我有一个数组,其中包含frame_10@3x.png,frame_5 @ 3x.png,frame_19 @ 3x.png等字符串.所以我想根据下划线后面的数字排序这个数组,即正确的序列是frame_5 @ 3x巴纽,frame_10 @ 3x.png,frame_19 @ 3x.png.

我尝试使用以下方法但没有结果:

NSInteger firstNumSort(id str1, id str2, void *context) {
    int num1 = [str1 integerValue];
    int num2 = [str2 integerValue];

    if (num1 < num2)
        return NSOrderedAscending;
    else if (num1 > num2)
        return NSOrderedDescending;

    return NSOrderedSame;
}
Run Code Online (Sandbox Code Playgroud)

请建议如何对数组进行排序.

Nag*_*one 8

NSArray *sry_img = [[NSArray alloc]    initWithObjects:@"frame_18@3x.png",@"frame_17@3x.png",@"frame_1222@3x.png",@"frame_10@3x.png",@"frame_3@3x.png",@"frame_4@3x.png",@"frame_4@3x.png",@"frame_1@3x.png",@"frame_4@3x.png",@"frame_4@3x.png",nil];
  NSArray *sortedStrings  = [sry_img sortedArrayUsingSelector:@selector(localizedStandardCompare:)];

NSLog(@"%@",sortedStrings);
Run Code Online (Sandbox Code Playgroud)

恩吉.......

但是,只要文件名或其他字符串出现在适合类似Finder的排序的列表和表中,就应该使用在10.6中添加的localizedStandardCompare:.此方法的确切行为可能会在将来的版本中进行调整,并且在不同的本地化下会有所不同,因此客户端不应该依赖于字符串的确切排序顺序.