我想使用字典值“名称”和“计数”对数组进行排序。将按字母顺序命名,然后根据计数将名称分为两组。
大于0
小于等于0
我当前的实现看起来像这样,但是它没有将组正确地拆分。
NSSortDescriptor *sortCountDescriptor = [[NSSortDescriptor alloc] initWithKey:@"count" ascending:NO];
NSSortDescriptor *sortNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray * sortDescriptors = [NSArray arrayWithObjects:sortCountDescriptor, sortNameDescriptor, nil];
NSArray *sortedArray = [myArrayToSort sortedArrayUsingDescriptors:sortDescriptors];
return [sortedArray mutableCopy];
最佳答案
如果通过分组意味着将它们分开,则需要NSPredicate而不是NSSortDescriptor作为计数键。
尝试一下(据我了解,数组中充满了NSDictionary
实例,因此我使用了强制转换。如果该假设不正确,则不难将NSPredicate更改为其他类型,或者使用KVC使之更通用):
NSSortDescriptor * sortNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@“ name” ascending:NO];
NSArray * sortDescriptors = [NSArray arrayWithObjects:sortNameDescriptor,nil];
NSArray *sortedArray = [myArrayToSort sortedArrayUsingDescriptors:@[sortNameDescriptor]];
NSPredicate *zeroOrLessPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
if ([[((NSDictionary*)evaluatedObject) objectForKey:@"count"] integerValue] <= 0) {
return YES;
}
else {
return NO;
}
}];
NSArray *zeroOrLessArray = [sortedArray filteredArrayUsingPredicate:zeroOrLessPredicate];
NSPredicate *moreThanZeroPredicate = [NSCompoundPredicate notPredicateWithSubpredicate:zeroOrLessPredicate];
NSArray *moreThanZeroArray = [sortedArray filteredArrayUsingPredicate:moreThanZeroPredicate];
关于ios - 使用两个NSSortDescriptor过滤数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43036460/