2010-01-09 19 views
6

Tengo un NSArray que contiene números como objetos NSString. es decir.cómo ordenar un NSArray usando compare: opciones

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

¿Cómo ordeno la matriz numéricamente? ¿Puedo usar compare:options y especificar NSNumericSearch como NSStringCompareOptions? Por favor dame un ejemplo/código de muestra.

Respuesta

16

Puede utilizar el código de ejemplo dado por el método sortedArrayUsingFunction:context: que debería funcionar bien para NSStrings también, ya que también tienen el método 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 Puede reemplazar el cuerpo de intSort con solo esta línea: return [(NSString *) num1 comparar: num2 opciones: NSNumericSearch]; – gerry3

+0

@ gerry3 Claro, acabo de sacar el código de ejemplo dado en apple.com que parecía que haría el trabajo – epatel

6

Dado que sus objetos son números, en lugar de usar objetos NSString, podría usar objetos NSNumber (fácilmente convertidos en cadenas mediante la propiedad stringValue) y ordenar la matriz usando sortedArrayUsingDescriptors:.

Por ejemplo:

NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES]; 
NSArray *sorters = [[NSArray alloc] initWithObjects:sorter, nil]; 
[sorter release]; 
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:sorters]; 
[sorters release]; 
Cuestiones relacionadas