2011-08-09 13 views
36

Esta es una pregunta bastante básica sobre la mejor forma de ordenar un NSMutableArray de objetos personalizados.Ordenar NSMutableArray Por propiedad del objeto

Tengo un NSMutableArray de objetos personalizados, cada objeto con un NSString y NSDate que van juntos. Necesito ordenar la matriz por el objeto más nuevo (tan reciente NSDate), y estoy bastante seguro de que podría simplemente usar NSDate compare: NSDate si esto fuera una matriz de solo NSDate, pero como necesito todos los objetos para ser ordenados y no solo la fecha , No estoy seguro si puedo usar ese método.

En términos de pseudo-código, necesito: Mira objeto individual, determinar si el objeto actual NSDate es el más grande al lado de la matriz, y si lo es, mover el objeto, no sólo la fecha.

Una vez más, esto es algo de lo que dudaba, ya que es muy básico, pero no quiero ir a escribir un método groseramente ineficiente si hay un método de clase preexistente que esencialmente hará lo que quiero, busque una matriz de sub propiedades de objetos y ordenar los objetos de acuerdo con las subpropiedades.

Gracias por cualquier ayuda.

Respuesta

79

NSSortDescriptors s hacen esto realmente simple. Con NSMutableArray puede ordenar la matriz existente mediante sortUsingDescriptors: y con matrices inmutables que crear una nueva matriz mediante sortedArrayUsingDescriptors:

//This will sort by stringProperty ascending, then dateProperty ascending 
[mutable_array sortUsingDescriptors: 
@[ 
    [NSSortDescriptor sortDescriptorWithKey:@"stringProperty" ascending:YES], 
    [NSSortDescriptor sortDescriptorWithKey:@"dateProperty" ascending:YES] 
    ]]; 
+0

Gracias, que parece ser justo lo ¡Estoy buscando! –

+0

Parece que debería haber hecho un poco más de investigación también, esta pregunta era exactamente mi problema también para cualquier persona en el futuro: http://stackoverflow.com/questions/6083408/sort-nsarray-of-custom-objects-by -sir-nsdate-properties –

+0

¡Muchas gracias! Eso hizo la magia para mí :) –

17

Este pequeño fragmento trabajado muy bien para mí:

[students sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]]; 
Cuestiones relacionadas