2011-12-22 30 views
5

Tôi có một loại "Nhà hàng" có NSSet là "Xếp hạng". Xếp hạng có ID và giá trị.Sắp xếp NSMutableArray bằng cách sử dụng SortDescriptor VÀ Predicate possible?

Tôi muốn sắp xếp mảng Nhà hàng theo xếp hạng có ID là 01, từ cao xuống thấp.

Giống như sau, nhưng làm cách nào để sử dụng biến vị ngữ và bộ mô tả sắp xếp cùng nhau trên 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]]; 

Trả lời

5

Bạn có thể sắp xếp mảng bằng cách sử dụng khối 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

Điều này có thể đặc biệt rườm rà/chậm nếu 'mảng' chứa một số lượng lớn đối tượng. Ngoài ra, tôi nghĩ rằng bạn đặt 'obj1' hai lần một cách tình cờ, trong đó thứ hai phải là 'obj2'. – dreamlax

+1

Vâng, bạn nói đúng. –

Các vấn đề liên quan