我浏览了网页,并了解使用NSMutableArray
对sortUsingSelector:
进行排序的方法之一。但我对确切需要做什么仍然有点不稳定。我知道比较器方法应该返回NSOrderedAscending
或NSOrderedDescending
才能进行排序,但我需要更多的帮助。
我有一个Block对象数组。每个区块的唯一ID范围为1到200+。我想基于Block对象uniqueID对数组进行排序。这可能吗?
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];
}
现在,显然这个数组在初始化之后被排序,但我稍后添加和删除Blocks,并且之后想要使用数组。请帮忙!
答案 0 :(得分: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];
使用此选项,您可以通过向描述符数组添加多个NSSortDescriptor来指定多个排序级别。
答案 1 :(得分: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;
}];