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
我从未使用过自定义比较器。你能给我一个提示或链接吗?我没有太多的时间来写你的案例,但请检查这个问题,它的作用完全相同,但有另一个排序标准: