使用KVC, NSPredicate, passingTest筛选集合

//    1、使用kvc
    NSArray *array = @[@"tom",@"lily",@"Games"];
    NSLog(@"%@",[array valueForKeyPath:@"length"]);
    
    NSLog(@"%@",[array valueForKeyPath:@"@max.length"]);
    
    
    NSArray *array1 = @[@1, @2, @2, @2, @2, @3,@7,@8];
    //先取不重复的子集,然后计算总和
    //注意@distinctUnionOfObjects和@sum不能直接在一个keyPath中连接,所以需要两次调用valueForKeyPath
    NSLog(@"%@",[[array1 valueForKeyPath:@"@distinctUnionOfObjects.self"] valueForKeyPath:@"@sum.self"]);
    
    
//    2、使用NSPredicate
    NSArray *arr2 = @[@"apple",@"pera",@"banana"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"length > 4"];
    NSLog(@"%@",[arr2 filteredArrayUsingPredicate:predicate]);
    
    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF ENDSWITH 'e' OR length > 5"];
    NSLog(@"%@",[arr2 filteredArrayUsingPredicate:predicate1]);
    
    
    
    
    NSArray *arr3 = @[@"pig",@"beautiful",@"sunday",@"four"];
    NSPredicate *predicate2 = [NSPredicate predicateWithBlock:^BOOL(id  _Nullable evaluatedObject, NSDictionary * _Nullable bindings) {
        NSString *str = evaluatedObject;
        return [str hasSuffix:@"y"] || str.length > 5;
    }];
    NSLog(@"%@",[arr3 filteredArrayUsingPredicate:predicate2]);
    
    
//    3.使用集合本身的passingTest相关方法
    NSIndexSet *indexSet = [arr3 indexesOfObjectsWithOptions:NSEnumerationReverse passingTest:^BOOL(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSString *str = obj;
        if ([str hasSuffix:@"y"] || str.length > 5) {
//            *stop = YES;
            return YES;
        }
        return NO;
    }];
    NSLog(@"%@",[arr3 objectsAtIndexes:indexSet]);

你可能感兴趣的:(使用KVC, NSPredicate, passingTest筛选集合)