2011-12-22 5 views
5

Ho un array di tipo "Restaurant" che ha una NSSet di "Rating". Il punteggio ha un ID e un valore.Ordinamento di NSMutableArray utilizzando SortDescriptor E Predicato possibile?

Desidero ordinare l'array di Restaurant in base a un ID 01, da alto a basso.

Qualcosa come il seguente, ma come utilizzare il predicato e il descrittore di ordinamento insieme su originalArray?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Rating.rating_id=%d", ratingID]; 
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"currentValue" ascending:YES]; 
NSArray *sorted = [[originalArray allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 

risposta

5

È possibile ordinare la matrice utilizzando un blocco NSComparator.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"rating_id = %d", ratingID]; 

NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 

    int value1 = [[[[obj1 ratings] filteredSetUsingPredicate:predicate] anyObject] currentValue]; 
    int value2 = [[[[obj2 ratings] filteredSetUsingPredicate:predicate] anyObject] currentValue]; 

    if (value1 < value2) 
     return NSOrderedAscending; 
    if (value1 > value2) 
     return NSOrderedDescending; 
    return NSOrderedSame; 
}]; 
+1

Questo potrebbe risultare particolarmente macchinoso/lento se 'matrice' contiene un numero elevato di oggetti. Inoltre, penso che tu abbia messo "obj1" due volte per caso, dove il secondo dovrebbe essere "obj2". – dreamlax

+1

Sì, hai ragione. –