2013-07-24 76 views
1

我有以下字符串中的數字數組。使用自定義比較器排序字符串的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) 

但是從來沒有使用過它。

有幫助嗎?

親切的問候

編輯

奧凱所以此刻我這樣做。

NSArray *unsortedKeys = [self.sectionedKalender allKeys]; 

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

從01 - > 12這排序數組這些數字代表我在我的tableview中的月份。目前在Januari開始,並在十二月停止。我現在想要的是,從六月開始到三月結束。

希望這個問題有點清楚。

+4

是什麼樣的排序是這樣的稱呼呢? –

+6

這不是排序。 – samfisher

+0

使用你的自定義邏輯... – Maulik

回答

6

首先寫一個簡單的比較函數;

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] 
+0

智能解決方案!從來沒有好的數學...謝謝你的答案哥們,感激! – Steaphann