标签:des io 使用 ar for 文件 sp log on
谓词,呃,其实是一个NSPredicate对象,你可以设置一些条件给这个对象,那么这个对象就相当于一个过滤器了,满足它条件的和不满足的如何如何,是一个过滤作用。
(1)创建一个对象,有name和age两个实例变量,然后利用for语句创建10个对象到一个数组中,最后创建一个谓词,过滤一下,把年龄小于25的那个对象的名字输出。
//Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property(nonatomic,copy)NSString *name; @property(nonatomic,retain)NSNumber *age; @end
//main.m文件 #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { //定义一个数组,并利用for语句往里面添加10个元素 NSMutableArray *mutarr1=[NSMutableArray arrayWithCapacity:10]; for (int i=0; i<10; i++) { Person *person=[[Person alloc]init]; person.age=@(20+i); if (i<5) { person.name=[NSString stringWithFormat:@"jack_%d",i]; }else{ person.name=[NSString stringWithFormat:@"tom_%d",i]; } [mutarr1 addObject:person]; } //创建一个谓词,也就是过滤条件,直观可见这个条件就是年龄小于25 NSPredicate *predic1=[NSPredicate predicateWithFormat:@"age<25"]; //利用循环这个数组,输出符合条件的对象的name for (Person *p in mutarr1) { if ([predic1 evaluateWithObject:p]) { NSLog(@"%@",p.name); } } } return 0; }
jack_0 jack_1 jack_2 jack_3 jack_4
NSArray *arr2=[mutarr1 filteredArrayUsingPredicate:predic1]; NSLog(@"%@",arr2);当然,这样做之前,需要先定义对象的打印方法,在Person.m文件中:
#import "Person.h" @implementation Person -(NSString *)description{ NSString *s=[NSString stringWithFormat:@"%@,%@",_name,_age]; return s; } @end
NSPredicate *predic1=[NSPredicate predicateWithFormat:@"age<%d",25];
NSPredicate *predic1=[NSPredicate predicateWithFormat:@"age<%d && age>21",25];
NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name in {'jack_0','jack_1'}"];
NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name BEGINSWITH'j' || ENDSWITH '1'"];
NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name CONTAINS 'a' "]; NSPredicate *predic1=[NSPredicate predicateWithFormat:@"name LIKE '*a*' "];
【OC学习-33】谓词介绍和小案例,其实相当于一个筛选过滤器的作用
标签:des io 使用 ar for 文件 sp log on
原文地址:http://blog.csdn.net/weisubao/article/details/39181025