Objective c 按字符串中包含的数字对NSStrings的NSArray进行排序。重新排列字符串,使数字在开头?

Objective c 按字符串中包含的数字对NSStrings的NSArray进行排序。重新排列字符串,使数字在开头?,objective-c,cocoa,sorting,Objective C,Cocoa,Sorting,我有一个字符串数组,看起来像这样 "/var/folders/zy/zy4FzDGQEUuq9jZ1hTRFHk+++TI/-Tmp-/tarDir0172809001305545247/0516_GTB_HP_01.pdf" "/var/folders/zy/zy4FzDGQEUuq9jZ1hTRFHk+++TI/-Tmp-/tarDir0172809001305545247/0516_ETB_HP_28.pdf" 如您所见,它们的数字和字符不同G或E。 当我像这样对它们排序时,它们是按GT

我有一个字符串数组,看起来像这样

"/var/folders/zy/zy4FzDGQEUuq9jZ1hTRFHk+++TI/-Tmp-/tarDir0172809001305545247/0516_GTB_HP_01.pdf"
"/var/folders/zy/zy4FzDGQEUuq9jZ1hTRFHk+++TI/-Tmp-/tarDir0172809001305545247/0516_ETB_HP_28.pdf"
如您所见,它们的数字和字符不同
G
E
。 当我像这样对它们排序时,它们是按
GTB
/
ETB
排序的,然后是按末尾的数字排序的。但我想要的是先把它们按数字排序,然后按字母E或G排序。 我应该提到的是,可能会出现一些字符串,它们的末尾有相同的数字,只是不同于
G
E

所以我想到的,可能只是在最后用字符
ETB
GTB
交换数字。 最优雅的方式是什么? 或者你还有其他建议吗?
谢谢

您可以在NSArray或NSMutableArray中使用自定义比较器进行排序。在该函数中,您可以将字符串拆分为多个部分,并按照您想要的方式进行比较(首先是数字,如果这些数字等于GTB/ETB)

如果您可以针对iOS 4.x及更高版本,则可以使用块

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

    // obj1 and obj2 are 2 strings from you array
    // here you write your own logic to understand if obj1 <=> obj2
    // here's an example in pseudo code
    if (obj1 > obj2)
        return (NSComparisonResult)NSOrderedDescending;
    if (obj1 < obj2)
        return (NSComparisonResult)NSOrderedAscending;
    return (NSComparisonResult)NSOrderedSame;
}];
NSArray*sortedArray=[使用比较器的数组sortedArray:^(id obj1,id obj2){
//obj1和obj2是数组中的两个字符串
//在这里,您可以编写自己的逻辑,以了解obj1 obj2
//下面是一个伪代码示例
如果(obj1>obj2)
返回(NSComparisonResult)或撤销;
如果(obj1
我从未使用过自定义比较器。你能给我一个提示或链接吗?我没有太多的时间来写你的案例,但请检查这个问题,它的作用完全相同,但有另一个排序标准: