用自定义对象过滤NSArray

这个问题在这里已经有了答案:

  • 我如何排序一个NSMutableArray中的自定义对象? 25个答案

  • 一些沿着这些线应该做的伎俩:

    NSMutableSet * types = [NSMutableSet setWithCapacity:10];
    NSPredicate * filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    
        if ([types containsObject:[evaluatedObject type]]) {
            return NO;
        }
        else {
            [types addObject:[evaluatedObject type]];
            return YES
        }
    }];
    NSArray * filteredArray = [detailedError filteredArrayUsingPredicate:filterPredicate];
    

    上面的代码保留了每种类型的第一个对象并删除了其他对象。


    我会通过重写hash和isEqual来做到这一点:

    - (BOOL) isEqual:(id)object
    {
        if([object isKindOfClass: [self class]])
            return [_type isEqualToString: object];
        return NO;
    }
    
    - (NSInteger) hash
    {
        return [_type hash];
    }
    

    然后从数组中创建的集合中获取不同的对象数组:

    NSArray* filteredArray= [NSSet setWithArray: array].allObjects;
    
    链接地址: http://www.djcxy.com/p/70817.html

    上一篇: Filtering an NSArray with custom objects

    下一篇: Sort NSMutableArray with custom objects by another NSMutableArray