2013-07-24 2 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. Эти цифры представляют мои месяцы в моем представлении таблицы. На данный момент начинается в Януари и останавливается в декабре. Сейчас я хочу, чтобы он начинался в июне и заканчивался маршем.

Надеюсь, что это немного уладит вопрос.

+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

Смежные вопросы