2010-12-04 19 views
11

que tienen un NSArray de objetos NSDate y quiero que los clasifique por lo que hoy en día está en 0, 1, etc. ayer enclasificar un NSArray de NSDates

¿Es ascendente o descendente, y hacer yo utilizo una función, selector o qué?

Respuesta

37

Existen diferentes métodos de ordenamiento para NSArray porque puede haber diferentes formas de ordenar las cosas. Los NSSortDescriptors son una forma general que le ofrece muchas opciones en cuanto a qué teclas usar en la ordenación, qué selectores desea usar en esas teclas, y el orden general de uso, etc. O puede usar funciones o bloques de comparación en su lugar si su caso lo requiere o si es más conveniente para su caso particular.

Para responder a su primera pregunta, si quiere que hoy sea el primero, seguido de ayer, entonces, sí, eso es, por supuesto, en orden descendente.

Para ordenar algunas fechas en orden sólo se puede hacer esto descendente: (suponiendo un NSArray llena de NSDates llamados 'dateArray'):

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO]; 
NSArray *descriptors = [NSArray arrayWithObject: descriptor]; 
[descriptor release]; 

NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors]; 

O, si usted está construyendo para iOS 4+ o Snow Leopard + usted puede hacer esto:

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
             ^(id obj1, id obj2) { 
              return [obj2 compare:obj1]; // note reversed comparison here 
             }]; 
-1

probar este mágico:

Ordenar serie de fechas en orden ascendente.

es decir, las fechas se vuelven más y más tarde, o para decirlo de otra manera, las fechas van hacia el futuro.

NSArray ascendingDates = [dates sortedArrayUsingSelector:@selector(compare:)]; 

Ordenar serie de fechas en orden descendente. (lo que la pregunta hecha)

fechas es decir, consiguiendo cada vez más temprano, las fechas de entrar en el pasado o para decirlo de otra manera: en la actualidad está en el índice 0, ayer en el índice 1.

NSArray* descendingDates = [[[dates sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];