Pregunta

¿Hay una manera fácil de ordenar un NSMutableArray de NSMutableArrays contienen NSStrings?

Estoy seguro de que debe haber un método sencillo para hacer esto, pero me parece que no puede encontrarlo.

Para aclarar quiero para ordenar la primera matriz alfabéticamente por el NSString en el índice 3 de la matriz de sub.

¿Fue útil?

Solución

No vi a nadie en realidad responder a esta con otra cosa que "utilizar esta función, la figura hacia fuera". Así que aquí hay un código real que se puede utilizar.

Ponga esta categoría al final de su archivo .h (o en cualquier lugar e importar el .h donde cada vez que necesita para ordenar)

@interface NSString (SortCompare)

-(NSInteger)stringCompare:(NSString *)str2;

@end

Ponga esto en el archivo .m (o el .m de la .h que va a importar)

@implementation NSString (SortCompare)

-(NSInteger) stringCompare:(NSString *)str2
{
    return [(NSString *)self localizedCaseInsensitiveCompare:str2];
}

@end

Ahora utilice la clase llamando sortUsingSelector: en la matriz
NSMutableArray:

[myArray sortUsingSelector:@selector(stringCompare:)];

NSArray:

[myArray sortedArrayUsingSelector:@selector(stringCompare:)];

Otros consejos

Si su NSMutableArray sólo contiene objetos de tipo NSString, sólo tiene que hacer:

[myMutableArray sortUsingSelector:@selector(compare:)];

Como otros han mencionado, NSArray no tiene un selector compare: que le permite ponerse en orden, por lo que tendrá que definir por sí mismo. Me gustaría crear una categoría en NSArray con un método llamado compare:(NSArray *)otherArray (o algo que mejor describe lo que hace) y el uso que con sortUsingSelector:.

En función de sus necesidades lo que pueda cosas de todas sus cadenas en una gran variedad cuando se necesita para clasificarlos, y utilizar en su lugar. Podría ser un poco menos código a escribir.

Puede ordenar por llave con:

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top