通过String中包含的Number对NSStrings的NSArray进行排序。重新排列字符串所以数字在开头?

时间:2011-05-16 11:49:35

标签: 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"

如您所见,tehy因数字和字符GE而异。  当我按照这样对它们进行排序时,它们按GTB / ETB排序,然后按最后的数字排序。但我想要的是首先让它们按数字排序,然后按字母E或G排序。 我应该提到的是,可能会出现最终具有相同数字的字符串,只是GE不同。

所以我想到的可能只是简单地用字符ETBGTB交换数字。 最优雅的方式是什么? 或者你还有其他建议吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果您可以定位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;
}];