ios开发谓词NSPredicate的使用

OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据

#import "ViewController.h"

#import "PredicateModel.h"

@interface ViewController ()

@property (nonatomic,strong) NSMutableArray *modelArray;

@property (nonatomic,strong) NSMutableArray *searchResultArray;

@end

@implementation ViewController

-(NSMutableArray *)searchResultArray{

    if (!_searchResultArray) {

        _searchResultArray = [NSMutableArray array];

    }

    return _searchResultArray;

}

-(NSMutableArray *)modelArray{

    if (!_modelArray) {

        _modelArray = [NSMutableArray array];

        

        PredicateModel *modelOne = [PredicateModel new];

        modelOne.name = @"lili";

        modelOne.address = @"bj";

        modelOne.major = @"Chinese";

        modelOne.age = 10;

        [_modelArray addObject:modelOne];

        //

        PredicateModel *modelTwo = [PredicateModel new];

        modelTwo.name = @"meimei";

        modelTwo.address = @"sjz";

        modelTwo.major = @"math";

        modelTwo.age = 20;

        [_modelArray addObject:modelTwo];

        //

        PredicateModel *modelThree = [PredicateModel new];

        modelThree.name = @"lilei";

        modelThree.address = @"sz";

        modelThree.major = @"music";

        modelThree.age = 15;

        [_modelArray addObject:modelThree];

        

    }

    return _modelArray;

}

- (void)viewDidLoad {

    [super viewDidLoad];

//1.对NSArray过滤

    NSArray *oneArray =[self getStringArrayFromStringArray];

//2.判断手机号

    BOOL isPhoneNum = [self isMobileNumber:@"15110244530"];

//3.取两个数组的交集:

    NSArray *threeArray = [self getJiaoJiArray];

//4.从数值型元素中选取某范围内的数值元素,并组成新的数组

    NSArray *fourArray = [self getNumArrayFromNumArray];

//5.从数值数组中取某个元素

    NSArray *fiveArray = [self getSomeOneFromNumArray];

//6.取包含某个字符的元素组成的数组

    NSArray *sixArray = [self getArrayContainsOneCharactar];

//7.取以某字符开头的元素组成的数组

    NSArray *sevenArray = [self getArrayBeginsWithOneCharactar];

//8.取以某字符结尾的元素组成的数组

    NSArray *eigthArray = [self getArrayEndWithOneCharactar];

//=============多条件查询

//9.选取name字段包含me,major字段包含mu的新模型数组

    NSArray *nineArray = [self getNewModelArray];

//10.名字包含m,l字符的,age在15~20之间的

    NSArray *tenArray = [self getNewAnotherArray];

//11.name字段以ei结尾的

    NSArray *elevenArray = [self modelContainsSomeChaArray];

//12.name为meimei,age<20的

    NSArray *twelveArray = [self modelNameAndAge];

//?代表一个字符,下面的查询条件是:name中第二个字符是s的  不好使呢

//    predicate = [NSPredicate predicateWithFormat:@"name like '?s'"];

}

-(NSArray *)modelNameAndAge{

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = 'meimei' && age <= 20"];

    NSArray *array = [self.modelArray filteredArrayUsingPredicate:predicate];

    return array;

}

-(NSArray *)modelContainsSomeChaArray{

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name endswith 'ei'"];//endswith 不区分大小写

    NSArray *aaray = [self.modelArray filteredArrayUsingPredicate:predicate];

    return aaray;

}

-(NSArray *)getNewAnotherArray{

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name in {'m','l'} || self.age in{15,20}"];//in包含

    NSArray *ss = [self.modelArray filteredArrayUsingPredicate:predicate];

    return ss;

}

-(NSArray *)getNewModelArray{

    NSString *searchString = @"mu";

    if (self.searchResultArray != nil) {

        [self.searchResultArray removeAllObjects];

    }

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name CONTAINS[x] %@ || SELF.major CONTAINS[s] %@",@"me",searchString];

    self.searchResultArray = [[self.modelArray filteredArrayUsingPredicate:predicate] mutableCopy];

    return [self.searchResultArray copy];

}

-(NSArray *)getArrayEndWithOneCharactar{

    NSArray *array = @[@"lili",@"lucy",@"dali",@"babi",@"mami"];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF ENDSWITH[d] 'cy'"];//d不区分大小写,且任意字符都可以;SELF不区分大小写

    NSArray *temp = [array filteredArrayUsingPredicate:predicate];

    return temp;

}

-(NSArray *)getArrayBeginsWithOneCharactar{

    NSArray *array = @[@"lili",@"lucy",@"dali",@"babi",@"mami"];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[k] 'd'"];//d不区分大小写 []里写任意字符,注意是字符

    NSArray *temp = [array filteredArrayUsingPredicate:predicate];

    return temp;

}

-(NSArray *)getArrayContainsOneCharactar{

    NSArray *array = @[@"lili",@"Lucy",@"dali",@"babi",@"mami"];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[cd] '*l*' "];

    //[NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] 'L'"];//L不区分大小写

    NSArray *temp = [array filteredArrayUsingPredicate:predicate];

    return temp;

}

-(NSArray *)getSomeOneFromNumArray{

    NSArray *oneArray = @[@100,@12,@2,@12,@9];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF ==6"];

    NSArray *newArray = [oneArray filteredArrayUsingPredicate:predicate];

    NSLog(@"newArray:%@",newArray);

    return newArray;

}

-(NSArray *)getNumArrayFromNumArray{

    NSArray *array4 = [NSArray arrayWithObjects:@100,@20,@2,@4,@4,@6, nil];

    NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"SELF BETWEEN{1,20}"];

    NSArray *newArray4 = [array4 filteredArrayUsingPredicate:predicate4];

    return array4;

}

-(NSArray *)getJiaoJiArray{

    NSArray *oneArray = @[@"a",@"b",@"c",@"d"];

    NSArray *twoArray = @[@"e",@"f",@"a",@"g"];

    NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"SELF in%@",twoArray];//SELF代表本身in可大写可小写

    NSArray *jiaoJiArray = [oneArray filteredArrayUsingPredicate:predicate3];//获取交集

    NSLog(@"%@",jiaoJiArray);

    return jiaoJiArray;

}

-(NSArray *)getStringArrayFromStringArray{

    NSArray *array = [[NSArray alloc] initWithObjects:@"beijing",@"shanghai",@"guangzhou",@"wuhan", nil];

    NSString *string = @"ang";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",string];

    NSArray *newArray = [array filteredArrayUsingPredicate:pred];

    NSLog(@"newArray:%@",newArray);

    return newArray;

}

//正则判断手机号码地址格式

- (BOOL)isMobileNumber:(NSString *)mobileNum

{

    /**

     * 手机号码

     * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188

     * 联通:130,131,132,152,155,156,185,186

     * 电信:133,1349,153,180,189

     */

    NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";

    /**

     10         * 中国移动:China Mobile

     11         * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188

     12         */

    NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";

    /**

     15         * 中国联通:China Unicom

     16         * 130,131,132,152,155,156,185,186

     17         */

    NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";

    /**

     20         * 中国电信:China Telecom

     21         * 133,1349,153,180,189

     22         */

    NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$";

    /**

     25         * 大陆地区固话及小灵通

     26         * 区号:010,020,021,022,023,024,025,027,028,029

     27         * 号码:七位或八位

     28         */

    // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";

    

    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];

    NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];

    NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];

    NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];

    

    if (([regextestmobile evaluateWithObject:mobileNum] == YES)

        || ([regextestcm evaluateWithObject:mobileNum] == YES)

        || ([regextestct evaluateWithObject:mobileNum] == YES)

        || ([regextestcu evaluateWithObject:mobileNum] == YES))

    {

        if([regextestcm evaluateWithObject:mobileNum] == YES) {

            NSLog(@"China Mobile");

        } else if([regextestct evaluateWithObject:mobileNum] == YES) {

            NSLog(@"China Telecom");

        } else if ([regextestcu evaluateWithObject:mobileNum] == YES) {

            NSLog(@"China Unicom");

        } else {

            NSLog(@"Unknow");

        }

        

        return YES;

    }

    else

    {

        return NO;

    }

}

@end

猜你喜欢

转载自blog.csdn.net/denggun12345/article/details/81777199