2010-01-09 4 views
6

У меня есть NSArray, содержащий числа как объекты NSString. то есть.как отсортировать NSArray с помощью сравнения: опции

[array addObject:[NSString stringWithFormat:@"%d", 100]]; 

Как отсортировать массив численно? Могу ли я использовать compare:options и указать NSNumericSearch как NSStringCompareOptions? Пожалуйста, дайте мне пример/образец кода.

ответ

16

Вы можете использовать пример код, заданный для sortedArrayUsingFunction:context: метода, который должен работать нормально для NSStrings тоже, как у них также есть метод intValue.

// Place this functions somewhere above @implementation 
static NSInteger intSort(id num1, id num2, void *context) 
{ 
    int v1 = [num1 intValue]; 
    int v2 = [num2 intValue]; 
    if (v1 < v2) 
     return NSOrderedAscending; 
    else if (v1 > v2) 
     return NSOrderedDescending; 
    else 
     return NSOrderedSame; 
} 

// And used like this 
NSArray *sortedArray; 
sortedArray = [anArray sortedArrayUsingFunction:intSort context:NULL]; 
+0

+1 Вы можете заменить тело intSort только этой строкой: return [(NSString *) num1 compare: num2 options: NSNumericSearch]; – gerry3

+0

@ gerry3 Конечно, я просто вытащил пример кода, приведенный на apple.com, который выглядел так, будто он выполнит работу – epatel

6

Поскольку ваши объекты являются числами, вместо использования объектов NSString вы можете использовать объекты NSNumber (легко превращенные в строки через свойство stringValue) и сортировать массив с помощью sortedArrayUsingDescriptors:.

Например:

NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; 
NSArray *sorters = [[NSArray alloc] initWithObjects:sorter, nil]; 
[sorter release]; 
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:sorters]; 
[sorters release]; 
Смежные вопросы