1

我在字符串中有以下数字数组。

    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) 

但以前从未使用过。

有什么帮助吗?

亲切的问候

编辑

好吧,我现在就这样做了。

   NSArray *unsortedKeys = [self.sectionedKalender allKeys];

    NSMutableArray *sortedKeys = [[NSMutableArray alloc]initWithArray:[unsortedKeys sortedArrayUsingSelector:@selector(localizedCompare:)]];

这从 01 --> 12 对数组进行排序。这些数字代表我在表格视图中的月份。目前从一月开始,十二月停止。我现在想要的是六月开始,三月结束。

希望这能稍微澄清一下这个问题。

4

1 回答 1

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]
于 2013-07-24T06:56:43.023 回答