ios - 使用两个 NSSortDescriptor 来过滤数组

标签 ios objective-c nsarray nssortdescriptor

我想使用字典值“Name”和“Count”对数组进行排序。这将是按字母顺序排列的名称,并根据计数将名称分成两组。

大于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/

相关文章:

ios - NSString 检测数字然后括号

ios - 在 iOS 设备之间使用空投时如何将文件移出收件箱文件夹

objective-c - 使 NSViews 和 NSWindows 具有固定位置

ios - 将 NSArray 对象分配给其他 NSArray 对象是否正确?

ios - 在 SWIFT 4.1 中从 Firebase 检索数据时出现 'subscript' 的不明确使用和无法调用非函数类型 'AnyObject' 的值错误

ios - 无法在 swift 2.0 xcode 7 beta 中设置 TableView 的 UIEdgeInsets

objective-c - 如何在 xcode 中随机播放存储在数组中的图像而不重复

ios - 如何追加数组。或者我如何将模型转换为 nsmuttable 数组

ios - NSFetchedController 和部分

objective-c - UINavigationController 以编程方式全局更改导航栏色调颜色