2011-09-14 42 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; 
}];