• NSPredicate用于对集合类中的元素进行筛选


     

    #import <Foundation/Foundation.h>

    #import "Person.h"

     

    #define PRINT_BOOL(X) NSLog(@#X" %@", (X) ? @"是" : @"否")

     

    int main(int argc, const char * argv[]) {

        NSPredicate *predicate = nil;

        NSString *s = nil;

        

        Person *person = [[Person alloc] init];

        person.name = @"张三";

        person.age = 22;

     

        // 基本的匹配比较1,比较这个person的age是否大于20

        predicate = [NSPredicate predicateWithFormat:@"age > 20"];

        BOOL isMatch1 = [predicate evaluateWithObject:person];

        PRINT_BOOL(isMatch1);

        

        // 基本的匹配比较2,比较s这个字符串是否等于“Hello”

        s = @"Hello";

        predicate = [NSPredicate predicateWithFormat:@"SELF == 'Hello'"];

        BOOL isMatch2 = [predicate evaluateWithObject:s];

        PRINT_BOOL(isMatch2);

        

        // 带参数的匹配比较1(不能将参数作为属性路径),varDict的Key“name”对应的Value是不是以‘张’开头

        predicate = [NSPredicate predicateWithFormat:@"name LIKE $NAME"];

        NSDictionary *varDict = @{@"NAME":@"张*"};

        predicate = [predicate predicateWithSubstitutionVariables:varDict];

        BOOL isMatch3 = [predicate evaluateWithObject:person];

        PRINT_BOOL(isMatch3);

     

        // 带参数的匹配比较(%K代表路径,%@代表值)

        predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"name", @"张三1"];

        BOOL isMatch4 = [predicate evaluateWithObject:person];

        PRINT_BOOL(isMatch4);

        

        // NSArray筛选数组里面大于5的对象

        NSArray *arr = @[@1, @3, @8, @5, @6, @7];

        predicate = [NSPredicate predicateWithFormat:@"SELF > 5"];

        NSArray *arrRet = [arr filteredArrayUsingPredicate:predicate];

        NSLog(@"%@", arrRet);

        

        // NSMutableArray筛选包含‘en’的对象

        NSArray *arr1 = @[@"Chengdu", @"Beijing", @"Shanghai"];

        NSMutableArray *arr2 = [NSMutableArray arrayWithArray:arr1];

        predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS 'en'"];

        [arr2 filterUsingPredicate:predicate];

        NSLog(@"%@", arr2);

     

        [predicate release];

        [person release];

        

        return 0;

    }

  • 相关阅读:
    22算法中的O(1), O(n),O(logn), O(nlogn)是什么意思?
    212数据结构队列/优先队列
    02前端项目代码检查规范
    16对element源码进行修改实现上传列表增加上传文件大小显示
    182 尾调用/尾递归/尾递归优化/柯里化函数/蹦床函数
    2.formdata数据格式和json格式的区别
    18柯里化函数/偏函数
    MD5文件验证
    tomcat 部署运行静态html文件
    矩阵快速幂及其简单应用
  • 原文地址:https://www.cnblogs.com/tang910103/p/5061489.html
Copyright © 2020-2023  润新知