NSPredicate的学习

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

    @autoreleasepool {
        
        // insert code here...
//        NSLog(@"Hello, World!");
        //NSPredicate过略数组元素的用法比如你从文件中读入了一个array1,然后想把程序中的一个array2中符合array1中内容的元素过滤出来。
//        正 常傻瓜一点就是两个for循环,一个一个进行比较,这样效率不高,而且代码也不好看。
//            其实一个循环或者无需循环就可以搞定了,那就需要用搞 NSPredicate这个类了~膜拜此类~
//        NSArray *arrayFilter = [NSArray arrayWithObjects:@"pict", @"blackrain", @"ip", nil];
//        NSArray *arrayContents = [NSArray arrayWithObjects:@"I am a picture.", @"I am a guy", @"I am gagaga", @"ipad", @"iphone", nil];
//        int i = 0, count = [arrayFilter count];
//        for(i = 0; i < count; i ++)
//        {
//            NSString *arrayItem = (NSString *)[arrayFilter objectAtIndex:i];
//            NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"self CONTAINS %@", arrayItem];
//            //去掉arrayContents中包含arrayFilter元素的元素
//        NSLog(@"Filtered array with filter %@, %@", arrayItem, [arrayContents filteredArrayUsingPredicate:filterPredicate]);
//            }
        //另一个方法  不许循环
        NSArray *arrayFilter = [NSArray arrayWithObjects:@"abc1", @"abc2", nil];
        NSArray *arrayCon = [NSArray arrayWithObjects:@"a1", @"abc1", @"abc4", @"abc2", nil];
        NSMutableArray *arrayContent=[[NSMutableArray alloc]initWithArray:arrayCon];
        NSPredicate *thePredicate = [NSPredicate predicateWithFormat:@"NOT (SELF in %@)", arrayFilter];
        //对arrayContent进行了过滤
        [arrayContent filterUsingPredicate:thePredicate];
        NSLog(@"%@",arrayContent);
        
        //剩下的例子比较容易理解,就运行代码了
//        4)match的用法
//        1. 简单比较
//        NSString *match = @"imagexyz-999.png";
//        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", match];
//        NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
//        2. match里like的用法(类似Sql中的用法)
//        NSString *match = @"imagexyz*.png";
//        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like %@", match];
//        NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
//        3. 大小写比较
//        [c]表示忽略大小写,[d]表示忽略重音,可以在一起使用,如下:
//        NSString *match = @"imagexyz*.png"; //其中*为通配符
//        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF like[cd] %@", match];
//        NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
//
//        4.使用正则  使用正则时  就需要用match来匹配
//        NSString *match = @"imagexyz-\\d{3}\\.png";  //imagexyz-123.png
//        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF matches %@", match];
//        NSArray *results = [directoryContents filteredArrayUsingPredicate:predicate];
//谓词对一些语法的支持
//        predicate = [NSPredicate predicateWithFormat: @"name == 'Herbie'"];
//        predicate = [NSPredicate predicateWithFormat: @"engine.horsepower > 150"];
//        NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:@"name == $NAME"];
//        
//        varDict = [NSDictionary dictionaryWithObjectsAndKeys:
//                   @"Herbie", @"NAME", nil];
//        predicate = [predicateTemplate predicateWithSubstitutionVariables: varDict];
//        
//        predicate = [NSPredicate predicateWithFormat:
//                     @"(engine.horsepower > 50) AND (engine.horsepower < 200)"];
//        predicate = [NSPredicate predicateWithFormat: @"name < 'Newton'"];
        
    }
    return 0;
}

  

posted on 2014-03-09 23:54  chenhanqing_blcu  阅读(168)  评论(0编辑  收藏  举报