個人認為微詞是個很不錯的東西
1.自定義對象
@interface Person : NSObject@PRoperty(nonatomic , copy)NSString * name;@property(nonatomic , assign)int age;@property (nonatomic , retain)NSArray * familys;@end
2.簡單實用(數據比較)
- (void)testObject1 { Person *person = [[Person alloc] init]; person.name = @"gulong"; person.age = 24; //整形比較 NSPredicate * pred = [NSPredicate predicateWithFormat:@"age > 25"]; BOOL match = [pred evaluateWithObject:person]; NSLog(@"%s",(match)?"YES":"NO");
//printf: NO}
3.通配符和正則
- (void)testObject2 { /* BEGINSWITH:檢查某個字符串是否以另一個字符串開頭。 ENDSWITH:檢查某個字符串是否以另一個字符串結尾。 CONTAINS:檢查某個字符串是否以另一個字符串內部。 [c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,又不區分發音符號。 */ Person *person = [[Person alloc] init]; person.name = @"gulong"; person.age = 24; /* 通配符 */ NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name LIKE[cd] '*er*'"]; //*代表通配符Like還接受[cd]. predicate1 = [NSPredicate predicateWithFormat:@"name LIKE[cd] '???er*'"]; //?只匹配一個字符并且還可以接受[cd]. //*表示有多個占位符 /* 正則匹配 */ NSString *regex = @"[A-Za-z]+"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; if ([predicate evaluateWithObject:@"huang"]) { NSLog(@"字符串是否為純字母"); } //printf 字符串是否為純字母
}
4.數組的過濾1(里面的每個對象都是字符串)
- (void)testArray1 { NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"shanghai",@"guangzou",@"wuhan", nil]; NSString *string = @"ang"; //獲取帶有ang的所有字符串,然后形成一個數組 NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",string]; NSLog(@"%@",[array filteredArrayUsingPredicate:pred]); //printf: shanghai,guangzou}
5.數組的過濾2 (使用自定義的person類)
- (void)testArray2 { Person *person1 = [[Person alloc] init]; person1.name = @"long"; person1.age = 23; Person *person2 = [[Person alloc] init]; person2.name = @"gu"; person2.age = 23; Person *person3 = [[Person alloc] init]; person3.name = @"long"; person3.age = 24; NSArray *persons = @[person1,person2,person3]; //直接使用對象里面的屬性就可以了,不能使用數組的某個對象名(其實 NSPredicate *pred = [NSPredicate predicateWithFormat:@"name == 'long'"]; //相等 // (age > 23) AND (age < 26) AND 兩者都要滿足,OR 兩種滿足其一就可 // age between {23,26} 從23 到26之間 //@"name IN { 'Herbie', 'Snugs', 'Badger', 'Flap' }"; //包含在其中用IN NSArray *array = [persons filteredArrayUsingPredicate:pred]; NSLog(@"array %@",[array description]); }
6.數組過濾3(對象里面還有數據)
@property (nonatomic , retain)NSArray * familys; //person.h
- (void)testArray3 { Person *person1 = [[Person alloc] init]; person1.name = @"huang"; person1.age = 23; person1.familys = @[@"zhuge",@"zhangfei",@"liubei"]; Person *person2 = [[Person alloc] init]; person2.name = @"gu"; person2.age = 23; person2.familys = @[@"suiquan",@"huanggai",@"lusun"]; Person *person3 = [[Person alloc] init]; person3.name = @"huang"; person3.age = 24; person3.familys = @[@"caochao",@"xiahou",@"caozhi"]; NSArray *persons = @[person1,person2,person3]; /* * 數組包含時必須為 整個字符串,不是是部分(比如 huanggai 的 huang;這樣是無數據的) */ NSPredicate *pred = [NSPredicate predicateWithFormat:@"familys CONTAINS 'huanggai'"]; NSArray *array = [persons filteredArrayUsingPredicate:pred]; NSLog(@"array %@",[array description]); //打印 person2}
新聞熱點
疑難解答