使用自定义比较器对字符串的NSArray进行排序

时间:2013-07-24 06:31:57

标签: ios objective-c nsstring nsarray

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

    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月停止。我现在想要的是从六月开始到三月结束。

希望这可以解决一些问题。

1 个答案:

答案 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]