NSPredicate,厉害了我的哥
之前真的没在意,亦不知道还有这个东西,有这个东西我还有遍历?
这个东西真的强先上点大白馒头
- iOS Predicate 即谓词逻辑。和数据库的SQL语句具有相似性,都是从数据堆中根据条件进行筛选。
1.使用场景:
(1)NSPredicate给我留下最深印象的是两个数组求交集的一个需求,如果按照一般写法,需要2个遍历,但NSArray提供了一个filterUsingPredicate的方法,用了NSPredicate,就可以不用遍历!
(2)在存储自定义对象的数组中,可以根据条件查询数组中满足条件的对象。
2.重要语法
//1.比较运算符 >,<,==,>=,<=,!=
//例:@"number > 100"
// @"string == 'nihao'"
-(void)testPredicateComparation{
NSArray * array1 = @[@1,@2,@3,@4,@5];
NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF>4"];
NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
NSLog(@"%@",resultArray);
}
//2.范围运算符:IN,BETWEEN
//例:@"number BETWEEN {1,5}"
// @"address IN {'shanghai','beijing'}"
-(void)testPredicateRange{
NSArray * array1 = @[@1,@2,@3,@4,@5];
//此处注意包含1和5
NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF BETWEEN {1,5}"];
NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
NSLog(@"%@",resultArray);
}
//3.字符串相关 BEGINSWITH、ENDSWITH、CONTAINS
//例:@"name CONTAIN[cd] 'ang'" //包含某个字符串
// @"name BEGINSWITH[c] 'sh'" //以某个字符串开头
// @"name ENDSWITH[d] 'ang'" //以某个字符串结束
//
//注:[c]不区分大小写 [d]不区分发音符号即没有重音符号 [cd]既不区分大小写,也不区分发音符号。
-(void)testPredicatePelateToNSString{
NSArray * array1 = @[@"beijing",@"shanghai",@"shandong",@"guangzhou",@"shenzhen"];
NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] 'an'"];
NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
NSLog(@"%@",resultArray);
}
//4.通配符:LIKE
//例: @"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].
// @"name LIKE[cd] '???er*'"
-(void)testPredicateWildcard{
NSArray * array1 = @[@"beijing",@"shanghai",@"shandong",@"guangzhou",@"shenzhen"];
NSPredicate * bijiao = [NSPredicate predicateWithFormat:@"SELF like[cd] '*an*'"];
NSArray * resultArray = [array1 filteredArrayUsingPredicate:bijiao];
NSLog(@"%@",resultArray);
}