2011-12-22 18 views
5

NSSet "Derecelendirmesi" olan bir dizi "Restoran" var. Derecelendirmenin bir kimliği ve bir değeri vardır.SortDescriptor kullanarak NSMutableArray Sıralama ve Predicate mümkün?

Restoranın dizisini, yüksekten alta doğru bir 01 değeriyle derecelendirmeye göre sıralamak istiyorum.

Aşağıdaki gibi bir şey, ancak özgün sıralamada sıralama ve sıralama tanımlayıcısını nasıl birlikte kullanabilirim?

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

cevap

5

Diziyi NSComparator bloğunu kullanarak sıralayabilirsiniz.

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

'array' çok sayıda nesne içeriyorsa bu özellikle hantal/yavaş olabilir. Ayrıca, sanırım 'obj1' iki kez kaza ile koydu, ikincisi ise 'obj2' olmalıdır. – dreamlax

+1

Evet, haklısın. –