2011-12-22 5 views
5

NSSetが "Rating"の "Restaurant"タイプの配列があります。評価にはIDと値があります。SortDescriptor AND Predicateを使用してNSMutableArrayをソートすることは可能ですか?

レストランの配列をIDが01の高評価から低評価に並べ替える必要があります。

次のようなものですが、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]]; 

答えて

5

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

これは、 'array'に多数のオブジェクトが含まれていると、特に面倒で/遅くなる可能性があります。また、偶然に 'obj1'を2回置いたと思います.2番目は' obj2'でなければなりません。 – dreamlax

+1

はい、そうです。 –

関連する問題