2011-09-14 127 views
0

我查看了網絡並知道排序NSMutableArray的方法之一是使用sortUsingSelector:。但是我仍然有點不確定需要做什麼。我知道比較方法應該返回NSOrderedAscendingNSOrderedDescending以進行排序,但我需要更多的幫助。我有一個Block對象數組。每個Block有一個唯一的ID,範圍從1到200+。我想根據塊對象uniqueID對數組進行排序。這可能嗎?使用uniqueID對對象排序NSMutableArray

NSMutableArray *array = [[NSMutableArray alloc] init]; 
for (unsigned i = 0; i < 221; i++) { 
    Block *block = [[Block alloc] init]; 
    block.uniqueId = i; 
    [array addObject:block]; 
    [block release]; 
} 

現在,顯然這個數組在初始化後被排序,但是我稍後添加和刪除了塊,並且希望在之後使用數組。請幫忙!

回答

3

另一種選擇是使用排序描述符。它們基於對象內的屬性。 你可以做到這一點在這樣一行:

NSArray* sorted =[array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"uniqueId" ascending:YES]]]; 

或單獨

NSSortDescriptor* idDescriptor=[NSSortDescriptor sortDescriptorWithKey:@"uniqueID" ascending:YES] 
NSArray* descriptors=[NSArray arrayWithObject: idDescriptor]; 
NSArray* sortedArray=[array sortedArrayUsingDescriptors: descriptors]; 

創建它們使用此選項可以指定通過添加多個NSSortDescriptors的描述符數組排序的多個級別。

+0

哇,謝謝。我會試試這個! – RyJ

1
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id o1, id o2) { 
    int id1 = ((Block *)o1).uniqueId; 
    int id2 = ((Block *)o2).uniqueId; 

    if (id1 == id2) { 
     return NSOrderedSame; 
    } 
    if (id1 < id2) { 
     return NSOrderedAscending; 
    } 
    return NSOrderedDescending; 
}];