我在字符串中有以下数字数组。
08,
03,
11,
06,
01,
09,
12,
07,
02,
10
我希望它是:
06,
07,
08,
09,
10,
11,
12,
01,
02,
03
我该怎么做?我正在考虑使用这样的自定义比较器:
NSComparisonResult compare(NSString *numberOne, NSString *numberTwo, void *context)
但以前从未使用过它。
任何帮助?
亲切的问候
修改 的
Oké所以我现在这样做了。
NSArray *unsortedKeys = [self.sectionedKalender allKeys];
NSMutableArray *sortedKeys = [[NSMutableArray alloc]initWithArray:[unsortedKeys sortedArrayUsingSelector:@selector(localizedCompare:)]];
这将对01 - >中的数组进行排序。这些数字代表了我在桌面视图中的月份。目前在Januari开始,12月停止。我现在想要的是从六月开始到三月结束。
希望这可以解决一些问题。
答案 0 :(得分:7)
首先,编写一个简单的比较函数;
NSInteger mySort(id num1, id num2, void *context)
{
int v1 = ([num1 intValue]+6)%12; // (6+6)%12 is 0, so 6 sorts first.
int v2 = ([num2 intValue]+6)%12;
if (v1 < v2) return NSOrderedAscending;
else if (v1 > v2) return NSOrderedDescending;
else return NSOrderedSame;
}
然后使用sortedArrayUsingFunction:context:
NSArray *array = [[NSArray alloc] initWithObjects:
@"08",@"03",@"11",@"06",@"01",@"09",@"12",@"07",@"02",@"10",nil];
NSArray *sortedArray = [array sortedArrayUsingFunction:mySort context:NULL];
NSLog(@"%@", sortedArray);
> [06 07 08 09 10 11 12 01 02 03]