NSPredicate
1.从 数组1中过滤出数组2中没有的对象
NSArray *arrayFilter =[NSArray arrayWithObjects:@"abc1", @"abc2", nil];
NSArray *arrayContent =[NSArray arrayWithObjects:@"a1", @"abc1",@"abc4", @"abc2", nil];
NSPredicate *thePredicate= [NSPredicate predicateWithFormat:@"NOT (SELF in %@)", arrayFilter];
[arrayContentfilterUsingPredicate:thePredicate];
这样arrayContent过滤出来的就是不包含arrayFilter中的所有item了。
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.使用正则
NSString *match =@"imagexyz-\\d{3}\\.png"; //imagexyz-123.png
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"SELF matches %@", match];
NSArray *results =[directoryContents filteredArrayUsingPredicate:predicate];
总结:
1) 当使用聚合类的操作符时是可以不需要循环的
2)当使用单个比较类的操作符时可以一个循环来搞定
PS,例子 一中尝试使用[@"SELF CONTAINS %@", arrayFilter] 来过滤会挂调,因为CONTAINS时字符串比较操作符,不是集合操作符
NSDictionary,NSMutableDictionary